Qt 6.x
The Qt SDK
Loading...
Searching...
No Matches
qtypeinfo.h File Reference
#include <QtCore/qcompilerdetection.h>
#include <QtCore/qcontainerfwd.h>
#include <variant>
#include <optional>
#include <tuple>
+ Include dependency graph for qtypeinfo.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  QTypeInfo< T >
 
class  QTypeInfo< void >
 
class  QTypeInfoMerger< T, Ts >
 \inmodule QtCore More...
 
class  QTypeInfo< std::pair< T1, T2 > >
 
struct  QTypeTraits::detail::is_container< typename, typename >
 
struct  QTypeTraits::detail::is_container< T, std::void_t< typename T::value_type, std::is_convertible< decltype(std::declval< T >().begin() !=std::declval< T >().end()), bool > > >
 
struct  QTypeTraits::detail::has_operator_equal< typename, typename >
 
struct  QTypeTraits::detail::has_operator_equal< T, std::void_t< decltype(bool(std::declval< const T & >()==std::declval< const T & >()))> >
 
struct  QTypeTraits::detail::expand_operator_equal_container< T, bool >
 
struct  QTypeTraits::detail::expand_operator_equal_container< T, true >
 
struct  QTypeTraits::detail::expand_operator_equal_tuple< T >
 
struct  QTypeTraits::detail::expand_operator_equal_tuple< std::optional< T > >
 
struct  QTypeTraits::detail::expand_operator_equal_tuple< std::pair< T1, T2 > >
 
struct  QTypeTraits::detail::expand_operator_equal_tuple< std::tuple< T... > >
 
struct  QTypeTraits::detail::expand_operator_equal_tuple< std::variant< T... > >
 
struct  QTypeTraits::detail::has_operator_less_than< typename, typename >
 
struct  QTypeTraits::detail::has_operator_less_than< T, std::void_t< decltype(bool(std::declval< const T & >()< std::declval< const T & >()))> >
 
struct  QTypeTraits::detail::expand_operator_less_than_container< T, bool >
 
struct  QTypeTraits::detail::expand_operator_less_than_container< T, true >
 
struct  QTypeTraits::detail::expand_operator_less_than_tuple< T >
 
struct  QTypeTraits::detail::expand_operator_less_than_tuple< std::optional< T > >
 
struct  QTypeTraits::detail::expand_operator_less_than_tuple< std::pair< T1, T2 > >
 
struct  QTypeTraits::detail::expand_operator_less_than_tuple< std::tuple< T... > >
 
struct  QTypeTraits::detail::expand_operator_less_than_tuple< std::variant< T... > >
 
struct  QTypeTraits::is_dereferenceable< T, typename >
 
struct  QTypeTraits::is_dereferenceable< T, std::void_t< decltype(std::declval< T >().operator->())> >
 
struct  QTypeTraits::has_operator_equal< T >
 
struct  QTypeTraits::has_operator_less_than< T >
 
struct  QTypeTraits::has_ostream_operator< Stream, typename, typename >
 
struct  QTypeTraits::has_ostream_operator< Stream, T, std::void_t< decltype(detail::reference< Stream >()<< detail::const_reference< T >())> >
 
struct  QTypeTraits::has_istream_operator< Stream, typename, typename >
 
struct  QTypeTraits::has_istream_operator< Stream, T, std::void_t< decltype(detail::reference< Stream >() > > detail::reference< T >())> >
 

Namespaces

namespace  QtPrivate
 \macro QT_NAMESPACE
 
namespace  QTypeTraits
 
namespace  QTypeTraits::detail
 

Macros

#define Q_DECLARE_MOVABLE_CONTAINER(CONTAINER)
 
#define Q_DECLARE_TYPEINFO_BODY(TYPE, FLAGS)
 
#define Q_DECLARE_TYPEINFO(TYPE, FLAGS)
 

Typedefs

template<typename T >
using QTypeTraits::detail::expand_operator_equal = expand_operator_equal_container< T >
 
template<typename ... T>
using QTypeTraits::detail::expand_operator_equal_recursive = std::conjunction< expand_operator_equal< T >... >
 
template<typename T >
using QTypeTraits::detail::expand_operator_less_than = expand_operator_less_than_container< T >
 
template<typename ... T>
using QTypeTraits::detail::expand_operator_less_than_recursive = std::conjunction< expand_operator_less_than< T >... >
 
template<typename Container , typename T >
using QTypeTraits::has_operator_equal_container = std::disjunction< std::is_base_of< Container, T >, QTypeTraits::has_operator_equal< T > >
 
template<typename Container , typename T >
using QTypeTraits::has_operator_less_than_container = std::disjunction< std::is_base_of< Container, T >, QTypeTraits::has_operator_less_than< T > >
 
template<typename ... T>
using QTypeTraits::compare_eq_result = std::enable_if_t< std::conjunction_v< QTypeTraits::has_operator_equal< T >... >, bool >
 
template<typename Container , typename ... T>
using QTypeTraits::compare_eq_result_container = std::enable_if_t< std::conjunction_v< QTypeTraits::has_operator_equal_container< Container, T >... >, bool >
 
template<typename ... T>
using QTypeTraits::compare_lt_result = std::enable_if_t< std::conjunction_v< QTypeTraits::has_operator_less_than< T >... >, bool >
 
template<typename Container , typename ... T>
using QTypeTraits::compare_lt_result_container = std::enable_if_t< std::conjunction_v< QTypeTraits::has_operator_less_than_container< Container, T >... >, bool >
 
template<typename Stream , typename Container , typename T >
using QTypeTraits::has_ostream_operator_container = std::disjunction< std::is_base_of< Container, T >, QTypeTraits::has_ostream_operator< Stream, T > >
 
template<typename Stream , typename Container , typename T >
using QTypeTraits::has_istream_operator_container = std::disjunction< std::is_base_of< Container, T >, QTypeTraits::has_istream_operator< Stream, T > >
 

Enumerations

enum  {
  Q_COMPLEX_TYPE = 0 , Q_PRIMITIVE_TYPE = 0x1 , Q_RELOCATABLE_TYPE = 0x2 , Q_MOVABLE_TYPE = 0x2 ,
  Q_DUMMY_TYPE = 0x4
}
 

Functions

 Q_DECLARE_MOVABLE_CONTAINER (QList)
 
 Q_DECLARE_MOVABLE_CONTAINER (QQueue)
 
 Q_DECLARE_MOVABLE_CONTAINER (QStack)
 
 Q_DECLARE_MOVABLE_CONTAINER (QSet)
 
 Q_DECLARE_MOVABLE_CONTAINER (QMap)
 
 Q_DECLARE_MOVABLE_CONTAINER (QMultiMap)
 
 Q_DECLARE_MOVABLE_CONTAINER (QHash)
 
 Q_DECLARE_MOVABLE_CONTAINER (QMultiHash)
 
 Q_DECLARE_MOVABLE_CONTAINER (QCache)
 
template<typename T >
 Q_DECLARE_TYPEINFO_BODY (QFlags< T >, Q_PRIMITIVE_TYPE)
 
template<typename T >
const T & QTypeTraits::detail::const_reference ()
 
template<typename T >
T & QTypeTraits::detail::reference ()
 

Variables

template<typename T >
constexpr bool QtPrivate::qIsRelocatable = std::is_trivially_copyable_v<T> && std::is_trivially_destructible_v<T>
 
template<typename T >
constexpr bool QtPrivate::qIsValueInitializationBitwiseZero
 
template<typename T >
constexpr bool QTypeTraits::is_dereferenceable_v = is_dereferenceable<T>::value
 
template<typename T >
constexpr bool QTypeTraits::has_operator_equal_v = has_operator_equal<T>::value
 
template<typename T >
constexpr bool QTypeTraits::has_operator_less_than_v = has_operator_less_than<T>::value
 
template<typename Stream , typename T >
constexpr bool QTypeTraits::has_ostream_operator_v = has_ostream_operator<Stream, T>::value
 
template<typename Stream , typename T >
constexpr bool QTypeTraits::has_istream_operator_v = has_istream_operator<Stream, T>::value
 
template<typename Stream , typename T >
constexpr bool QTypeTraits::has_stream_operator_v = has_ostream_operator_v<Stream, T> && has_istream_operator_v<Stream, T>
 

Macro Definition Documentation

◆ Q_DECLARE_MOVABLE_CONTAINER

#define Q_DECLARE_MOVABLE_CONTAINER (   CONTAINER)
Value:
template <typename ...T> \
class QTypeInfo<CONTAINER<T...>> \
{ \
public: \
enum { \
isPointer [[deprecated("Use std::is_pointer instead")]] = false, \
isIntegral [[deprecated("Use std::is_integral instead")]] = false, \
isComplex = true, \
isRelocatable = true, \
}; \
}
@ isValueInitializationBitwiseZero
Definition qtypeinfo.h:53
@ isRelocatable
Definition qtypeinfo.h:52

Definition at line 108 of file qtypeinfo.h.

◆ Q_DECLARE_TYPEINFO

#define Q_DECLARE_TYPEINFO (   TYPE,
  FLAGS 
)
Value:
template<> \
Q_DECLARE_TYPEINFO_BODY(TYPE, FLAGS)
const char * FLAGS
const char * TYPE

Definition at line 163 of file qtypeinfo.h.

◆ Q_DECLARE_TYPEINFO_BODY

#define Q_DECLARE_TYPEINFO_BODY (   TYPE,
  FLAGS 
)
Value:
class QTypeInfo<TYPE > \
{ \
public: \
enum { \
isComplex = (((FLAGS) & Q_PRIMITIVE_TYPE) == 0) && !std::is_trivial_v<TYPE>, \
isRelocatable = !isComplex || ((FLAGS) & Q_RELOCATABLE_TYPE) || QtPrivate::qIsRelocatable<TYPE>, \
isPointer [[deprecated("Use std::is_pointer instead")]] = std::is_pointer_v< TYPE >, \
isIntegral [[deprecated("Use std::is_integral instead")]] = std::is_integral< TYPE >::value, \
isValueInitializationBitwiseZero = QtPrivate::qIsValueInitializationBitwiseZero<TYPE>, \
}; \
}
@ Q_PRIMITIVE_TYPE
Definition qtypeinfo.h:144
@ Q_RELOCATABLE_TYPE
Definition qtypeinfo.h:145

Definition at line 150 of file qtypeinfo.h.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
Q_COMPLEX_TYPE 
Q_PRIMITIVE_TYPE 
Q_RELOCATABLE_TYPE 
Q_MOVABLE_TYPE 
Q_DUMMY_TYPE 

Definition at line 142 of file qtypeinfo.h.

Function Documentation

◆ Q_DECLARE_MOVABLE_CONTAINER() [1/9]

Q_DECLARE_MOVABLE_CONTAINER ( QCache  )

◆ Q_DECLARE_MOVABLE_CONTAINER() [2/9]

Q_DECLARE_MOVABLE_CONTAINER ( QHash  )

◆ Q_DECLARE_MOVABLE_CONTAINER() [3/9]

Q_DECLARE_MOVABLE_CONTAINER ( QList  )

◆ Q_DECLARE_MOVABLE_CONTAINER() [4/9]

Q_DECLARE_MOVABLE_CONTAINER ( QMap  )

◆ Q_DECLARE_MOVABLE_CONTAINER() [5/9]

Q_DECLARE_MOVABLE_CONTAINER ( QMultiHash  )

◆ Q_DECLARE_MOVABLE_CONTAINER() [6/9]

Q_DECLARE_MOVABLE_CONTAINER ( QMultiMap  )

◆ Q_DECLARE_MOVABLE_CONTAINER() [7/9]

Q_DECLARE_MOVABLE_CONTAINER ( QQueue  )

◆ Q_DECLARE_MOVABLE_CONTAINER() [8/9]

Q_DECLARE_MOVABLE_CONTAINER ( QSet  )

◆ Q_DECLARE_MOVABLE_CONTAINER() [9/9]

Q_DECLARE_MOVABLE_CONTAINER ( QStack  )

◆ Q_DECLARE_TYPEINFO_BODY()

template<typename T >
Q_DECLARE_TYPEINFO_BODY ( QFlags< T >  ,
Q_PRIMITIVE_TYPE   
)