8#include <QtCore/qcompilerdetection.h>
9#include <QtCore/qcontainerfwd.h>
26inline constexpr bool qIsRelocatable = std::is_trivially_copyable_v<T> && std::is_trivially_destructible_v<T>;
36 std::is_scalar_v<T> && !std::is_member_object_pointer_v<T>;
49 isPointer [[deprecated(
"Use std::is_pointer instead")]] = std::is_pointer_v<T>,
50 isIntegral [[deprecated(
"Use std::is_integral instead")]] = std::is_integral_v<T>,
62 isPointer [[deprecated(
"Use std::is_pointer instead")]] =
false,
63 isIntegral [[deprecated(
"Use std::is_integral instead")]] =
false,
90template <
class T,
class...Ts>
93 static_assert(
sizeof...(Ts) > 0);
97 [[deprecated(
"Use std::is_pointer instead")]]
static constexpr bool isPointer =
false;
98 [[deprecated(
"Use std::is_integral instead")]]
static constexpr bool isIntegral =
false;
105template <
class T1,
class T2>
108#define Q_DECLARE_MOVABLE_CONTAINER(CONTAINER) \
109template <typename ...T> \
110class QTypeInfo<CONTAINER<T...>> \
114 isPointer [[deprecated("Use std::is_pointer instead")]] = false, \
115 isIntegral [[deprecated("Use std::is_integral instead")]] = false, \
117 isRelocatable = true, \
118 isValueInitializationBitwiseZero = false, \
132#undef Q_DECLARE_MOVABLE_CONTAINER
150#define Q_DECLARE_TYPEINFO_BODY(TYPE, FLAGS) \
151class QTypeInfo<TYPE > \
155 isComplex = (((FLAGS) & Q_PRIMITIVE_TYPE) == 0) && !std::is_trivial_v<TYPE>, \
156 isRelocatable = !isComplex || ((FLAGS) & Q_RELOCATABLE_TYPE) || QtPrivate::qIsRelocatable<TYPE>, \
157 isPointer [[deprecated("Use std::is_pointer instead")]] = std::is_pointer_v< TYPE >, \
158 isIntegral [[deprecated("Use std::is_integral instead")]] = std::is_integral< TYPE >::value, \
159 isValueInitializationBitwiseZero = QtPrivate::qIsValueInitializationBitwiseZero<TYPE>, \
163#define Q_DECLARE_TYPEINFO(TYPE, FLAGS) \
165Q_DECLARE_TYPEINFO_BODY(TYPE, FLAGS)
168template<
typename T>
class QFlags;
192template <
typename,
typename =
void>
196 typename T::value_type,
197 std::is_convertible<decltype(std::declval<T>().begin() != std::declval<T>().end()), bool>
198>> : std::true_type {};
204template <
typename,
typename =
void>
212template<typename T, bool = is_container<T>::value>
222template<
typename T,
bool>
229 std::is_same<T, typename T::value_type>,
230 expand_operator_equal<typename T::value_type>
231 >, expand_operator_equal_tuple<T>> {};
234template<
typename ...T>
241template<
typename T1,
typename T2>
243template<
typename ...T>
245template<
typename ...T>
249template <
typename,
typename =
void>
255template<typename T, bool = is_container<T>::value>
263template<
typename T,
bool>
269 std::is_same<T, typename T::value_type>,
270 expand_operator_less_than<typename T::value_type>
271 >, expand_operator_less_than_tuple<T>
274template<
typename ...T>
281template<
typename T1,
typename T2>
283template<
typename ...T>
285template<
typename ...T>
290template<
typename T,
typename =
void>
305template <
typename Container,
typename T>
313template <
typename Container,
typename T>
316template <
typename ...T>
317using compare_eq_result = std::enable_if_t<std::conjunction_v<QTypeTraits::has_operator_equal<T>...>,
bool>;
319template <
typename Container,
typename ...T>
322template <
typename ...T>
323using compare_lt_result = std::enable_if_t<std::conjunction_v<QTypeTraits::has_operator_less_than<T>...>,
bool>;
325template <
typename Container,
typename ...T>
337template <
typename Stream,
typename,
typename =
void>
339template <
typename Stream,
typename T>
342template <typename Stream, typename T>
343inline constexpr bool has_ostream_operator_v = has_ostream_operator<Stream, T>::value;
345template <typename Stream, typename Container, typename T>
346using has_ostream_operator_container = std::disjunction<std::is_base_of<Container, T>, QTypeTraits::has_ostream_operator<Stream, T>>;
348template <typename Stream, typename, typename = void>
349struct has_istream_operator : std::false_type {};
350template <typename Stream, typename T>
351struct has_istream_operator<Stream, T, std::void_t<decltype(detail::reference<Stream>() >> detail::reference<T>())>>
353template <
typename Stream,
typename T>
355template <
typename Stream,
typename Container,
typename T>
358template <
typename Stream,
typename T>
359inline constexpr bool has_stream_operator_v = has_ostream_operator_v<Stream, T> && has_istream_operator_v<Stream, T>;
static constexpr bool isValueInitializationBitwiseZero
static constexpr bool isIntegral
static constexpr bool isPointer
static constexpr bool isComplex
static constexpr bool isRelocatable
@ isValueInitializationBitwiseZero
Combined button and popup list for selecting options.
const T & const_reference()
std::conjunction< expand_operator_less_than< T >... > expand_operator_less_than_recursive
std::conjunction< expand_operator_equal< T >... > expand_operator_equal_recursive
std::enable_if_t< std::conjunction_v< QTypeTraits::has_operator_equal< T >... >, bool > compare_eq_result
constexpr bool is_dereferenceable_v
constexpr bool has_operator_equal_v
std::enable_if_t< std::conjunction_v< QTypeTraits::has_operator_equal_container< Container, T >... >, bool > compare_eq_result_container
constexpr bool has_stream_operator_v
std::enable_if_t< std::conjunction_v< QTypeTraits::has_operator_less_than_container< Container, T >... >, bool > compare_lt_result_container
std::enable_if_t< std::conjunction_v< QTypeTraits::has_operator_less_than< T >... >, bool > compare_lt_result
constexpr bool has_istream_operator_v
std::disjunction< std::is_base_of< Container, T >, QTypeTraits::has_operator_equal< T > > has_operator_equal_container
std::disjunction< std::is_base_of< Container, T >, QTypeTraits::has_operator_less_than< T > > has_operator_less_than_container
std::disjunction< std::is_base_of< Container, T >, QTypeTraits::has_istream_operator< Stream, T > > has_istream_operator_container
constexpr bool has_operator_less_than_v
constexpr bool qIsRelocatable
constexpr bool qIsValueInitializationBitwiseZero
#define QT_WARNING_DISABLE_FLOAT_COMPARE
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage void
#define Q_DECLARE_MOVABLE_CONTAINER(CONTAINER)
#define Q_DECLARE_TYPEINFO_BODY(TYPE, FLAGS)