8#include <QtCore/qcompilerdetection.h>
9#include <QtCore/qcontainerfwd.h>
34inline constexpr bool qIsRelocatable = std::is_trivially_copyable_v<T> && std::is_trivially_destructible_v<T>;
44 std::is_scalar_v<T> && !std::is_member_object_pointer_v<T>;
57 isPointer [[deprecated(
"Use std::is_pointer instead")]] = std::is_pointer_v<T>,
58 isIntegral [[deprecated(
"Use std::is_integral instead")]] = std::is_integral_v<T>,
70 isPointer [[deprecated(
"Use std::is_pointer instead")]] =
false,
71 isIntegral [[deprecated(
"Use std::is_integral instead")]] =
false,
98template <
class T,
class...Ts>
101 static_assert(
sizeof...(Ts) > 0);
105 [[deprecated(
"Use std::is_pointer instead")]]
static constexpr bool isPointer =
false;
106 [[deprecated(
"Use std::is_integral instead")]]
static constexpr bool isIntegral =
false;
109 std::is_copy_constructible_v<T> ||
110 std::is_move_constructible_v<T>,
111 "All Ts... are Q_RELOCATABLE_TYPE, but T is neither copy- nor move-constructible, "
112 "so cannot be Q_RELOCATABLE_TYPE. Please mark T as Q_COMPLEX_TYPE manually.");
118template <
class T1,
class T2>
121#define Q_DECLARE_MOVABLE_CONTAINER(CONTAINER) \
122template <typename ...T> \
123class QTypeInfo<CONTAINER<T...>> \
127 isPointer [[deprecated("Use std::is_pointer instead")]] = false, \
128 isIntegral [[deprecated("Use std::is_integral instead")]] = false, \
130 isRelocatable = true, \
131 isValueInitializationBitwiseZero = false, \
145#undef Q_DECLARE_MOVABLE_CONTAINER
163#define Q_DECLARE_TYPEINFO_BODY(TYPE, FLAGS) \
164class QTypeInfo<TYPE > \
168 isComplex = (((FLAGS) & Q_PRIMITIVE_TYPE) == 0) && !std::is_trivial_v<TYPE>, \
169 isRelocatable = !isComplex || ((FLAGS) & Q_RELOCATABLE_TYPE) || QtPrivate::qIsRelocatable<TYPE>, \
170 isPointer [[deprecated("Use std::is_pointer instead")]] = std::is_pointer_v< TYPE >, \
171 isIntegral [[deprecated("Use std::is_integral instead")]] = std::is_integral< TYPE >::value, \
172 isValueInitializationBitwiseZero = QtPrivate::qIsValueInitializationBitwiseZero<TYPE>, \
174 static_assert(!isRelocatable || \
175 std::is_copy_constructible_v<TYPE > || \
176 std::is_move_constructible_v<TYPE >, \
177 #TYPE " is neither copy- nor move-constructible, so cannot be Q_RELOCATABLE_TYPE"); \
180#define Q_DECLARE_TYPEINFO(TYPE, FLAGS) \
182Q_DECLARE_TYPEINFO_BODY(TYPE, FLAGS)
185template<
typename T>
class QFlags;
209template <
typename,
typename =
void>
213 typename T::value_type,
214 std::is_convertible<decltype(std::declval<T>().begin() != std::declval<T>().end()), bool>
215>> : std::true_type {};
221template <
typename,
typename =
void>
229template<typename T, bool = is_container<T>::value>
239template<
typename T,
bool>
246 std::is_same<T, typename T::value_type>,
247 expand_operator_equal<typename T::value_type>
248 >, expand_operator_equal_tuple<T>> {};
251template<
typename ...T>
258template<
typename T1,
typename T2>
260template<
typename ...T>
262template<
typename ...T>
266template <
typename,
typename =
void>
272template<typename T, bool = is_container<T>::value>
280template<
typename T,
bool>
286 std::is_same<T, typename T::value_type>,
287 expand_operator_less_than<typename T::value_type>
288 >, expand_operator_less_than_tuple<T>
291template<
typename ...T>
298template<
typename T1,
typename T2>
300template<
typename ...T>
302template<
typename ...T>
307template<
typename T,
typename =
void>
322template <
typename Container,
typename T>
330template <
typename Container,
typename T>
333template <
typename ...T>
334using compare_eq_result = std::enable_if_t<std::conjunction_v<QTypeTraits::has_operator_equal<T>...>,
bool>;
336template <
typename Container,
typename ...T>
339template <
typename ...T>
340using compare_lt_result = std::enable_if_t<std::conjunction_v<QTypeTraits::has_operator_less_than<T>...>,
bool>;
342template <
typename Container,
typename ...T>
354template <
typename Stream,
typename,
typename =
void>
356template <
typename Stream,
typename T>
359template <typename Stream, typename T>
360inline constexpr bool has_ostream_operator_v = has_ostream_operator<Stream, T>::value;
362template <typename Stream, typename Container, typename T>
363using has_ostream_operator_container = std::disjunction<std::is_base_of<Container, T>, QTypeTraits::has_ostream_operator<Stream, T>>;
365template <typename Stream, typename, typename = void>
366struct has_istream_operator : std::false_type {};
367template <typename Stream, typename T>
368struct has_istream_operator<Stream, T, std::void_t<decltype(detail::reference<Stream>() >> detail::reference<T>())>>
370template <
typename Stream,
typename T>
372template <
typename Stream,
typename Container,
typename T>
375template <
typename Stream,
typename T>
376inline 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.
std::conjunction< expand_operator_equal< T >... > expand_operator_equal_recursive
std::conjunction< expand_operator_less_than< T >... > expand_operator_less_than_recursive
const T & const_reference()
constexpr bool is_dereferenceable_v
constexpr bool has_operator_equal_v
constexpr bool has_stream_operator_v
std::disjunction< std::is_base_of< Container, T >, QTypeTraits::has_istream_operator< Stream, T > > has_istream_operator_container
constexpr bool has_istream_operator_v
std::disjunction< std::is_base_of< Container, T >, QTypeTraits::has_operator_equal< T > > has_operator_equal_container
std::enable_if_t< std::conjunction_v< QTypeTraits::has_operator_equal< T >... >, bool > compare_eq_result
std::disjunction< std::is_base_of< Container, T >, QTypeTraits::has_operator_less_than< T > > has_operator_less_than_container
std::enable_if_t< std::conjunction_v< QTypeTraits::has_operator_equal_container< Container, T >... >, bool > compare_eq_result_container
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_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)