Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qtypeinfo.h File Reference

(3ac259f4cc94efa0888ea04861d686a20b617fef)

#include <QtCore/qcompilerdetection.h>
#include <QtCore/qcontainerfwd.h>
#include <variant>
#include <optional>
#include <tuple>
#include <type_traits>
+ 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_NO_KEYWORDS >
 
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:61
@ isRelocatable
Definition qtypeinfo.h:60

Definition at line 121 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 180 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>, \
}; \
static_assert(!isRelocatable || \
std::is_copy_constructible_v<TYPE > || \
std::is_move_constructible_v<TYPE >, \
#TYPE " is neither copy- nor move-constructible, so cannot be Q_RELOCATABLE_TYPE"); \
}
@ Q_PRIMITIVE_TYPE
Definition qtypeinfo.h:157
@ Q_RELOCATABLE_TYPE
Definition qtypeinfo.h:158

Definition at line 163 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 155 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  )