QtBase  v6.3.1
Classes | Namespaces | Macros | Typedefs | Enumerations | Functions | Variables
qtypeinfo.h File Reference
#include <QtCore/qglobal.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 >
 
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

 QTypeTraits
 
 QTypeTraits::detail
 

Macros

#define Q_DECLARE_MOVABLE_CONTAINER(CONTAINER)
 
#define Q_DECLARE_TYPEINFO_BODY(TYPE, FLAGS)
 
#define Q_DECLARE_TYPEINFO(TYPE, FLAGS)
 
#define Q_DECLARE_SHARED_IMPL(TYPE, FLAGS)
 
#define Q_DECLARE_SHARED(TYPE)   Q_DECLARE_SHARED_IMPL(TYPE, Q_RELOCATABLE_TYPE)
 

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 TQTypeTraits::detail::const_reference ()
 
template<typename T >
TQTypeTraits::detail::reference ()
 

Variables

template<typename T >
constexpr bool qIsRelocatable = std::is_trivially_copyable_v<T> && std::is_trivially_destructible_v<T>
 
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 = false, \
isIntegral = false, \
isComplex = true, \
isRelocatable = true, \
}; \
}
Definition: main.cpp:38

Definition at line 120 of file qtypeinfo.h.

◆ Q_DECLARE_SHARED

#define Q_DECLARE_SHARED (   TYPE)    Q_DECLARE_SHARED_IMPL(TYPE, Q_RELOCATABLE_TYPE)

Definition at line 197 of file qtypeinfo.h.

◆ Q_DECLARE_SHARED_IMPL

#define Q_DECLARE_SHARED_IMPL (   TYPE,
  FLAGS 
)
Value:
inline void swap(TYPE &value1, TYPE &value2) \
noexcept(noexcept(value1.swap(value2))) \
{ value1.swap(value2); }
@ FLAGS
Definition: inflate.h:22
#define Q_DECLARE_TYPEINFO(TYPE, FLAGS)
Definition: qtypeinfo.h:173
this swap(other)
#define TYPE(t)

Definition at line 192 of file qtypeinfo.h.

◆ Q_DECLARE_TYPEINFO

#define Q_DECLARE_TYPEINFO (   TYPE,
  FLAGS 
)
Value:
#define Q_DECLARE_TYPEINFO_BODY(TYPE, FLAGS)
Definition: qtypeinfo.h:161

Definition at line 173 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) || qIsRelocatable<TYPE>, \
isPointer = false, \
}; \
}
#define value
[5]
@ isPointer
Definition: qtypeinfo.h:70
@ isComplex
Definition: qtypeinfo.h:72
@ isRelocatable
Definition: qtypeinfo.h:73
@ isIntegral
Definition: qtypeinfo.h:71
@ Q_PRIMITIVE_TYPE
Definition: qtypeinfo.h:155
@ Q_RELOCATABLE_TYPE
Definition: qtypeinfo.h:156

Definition at line 161 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 153 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   
)

Variable Documentation

◆ qIsRelocatable

template<typename T >
constexpr bool qIsRelocatable = std::is_trivially_copyable_v<T> && std::is_trivially_destructible_v<T>
inlineconstexpr

Definition at line 59 of file qtypeinfo.h.