RESTinio
Classes | Namespaces | Macros | Typedefs | Functions
variant.hpp File Reference
#include <cstddef>
#include <limits>
#include <new>
#include <stdexcept>
#include <utility>

Go to the source code of this file.

Classes

struct  nonstd::detail::in_place_type_tag< T >
 
struct  nonstd::detail::in_place_index_tag< I >
 
struct  nonstd::in_place_t
 
struct  nonstd::variants::detail::remove_reference< T >
 
struct  nonstd::variants::detail::remove_reference< T & >
 
struct  nonstd::variants::detail::add_pointer< T >
 
struct  nonstd::variants::detail::remove_const< T >
 
struct  nonstd::variants::detail::remove_const< const T >
 
struct  nonstd::variants::detail::remove_volatile< T >
 
struct  nonstd::variants::detail::remove_volatile< volatile T >
 
struct  nonstd::variants::detail::remove_cv< T >
 
struct  nonstd::variants::detail::conditional< Cond, Then, Else >
 
struct  nonstd::variants::detail::conditional< true, Then, Else >
 
struct  nonstd::variants::detail::conditional< false, Then, Else >
 
struct  nonstd::variants::detail::TX< T >
 
struct  nonstd::variants::detail::S0
 
struct  nonstd::variants::detail::S1
 
struct  nonstd::variants::detail::S2
 
struct  nonstd::variants::detail::S3
 
struct  nonstd::variants::detail::S4
 
struct  nonstd::variants::detail::S5
 
struct  nonstd::variants::detail::S6
 
struct  nonstd::variants::detail::nulltype
 
struct  nonstd::variants::detail::typelist< Head, Tail >
 
struct  nonstd::variants::detail::typelist_max< List >
 
struct  nonstd::variants::detail::typelist_max< nulltype >
 
struct  nonstd::variants::detail::typelist_max< typelist< Head, Tail > >
 
struct  nonstd::variants::detail::typelist_size< List >
 
struct  nonstd::variants::detail::typelist_size< T0 >
 
struct  nonstd::variants::detail::typelist_size< T1 >
 
struct  nonstd::variants::detail::typelist_size< T2 >
 
struct  nonstd::variants::detail::typelist_size< T3 >
 
struct  nonstd::variants::detail::typelist_size< T4 >
 
struct  nonstd::variants::detail::typelist_size< T5 >
 
struct  nonstd::variants::detail::typelist_size< T6 >
 
struct  nonstd::variants::detail::typelist_size< nulltype >
 
struct  nonstd::variants::detail::typelist_size< typelist< Head, Tail > >
 
struct  nonstd::variants::detail::typelist_index_of< List, T >
 
struct  nonstd::variants::detail::typelist_index_of< nulltype, T >
 
struct  nonstd::variants::detail::typelist_index_of< typelist< T, Tail >, T >
 
struct  nonstd::variants::detail::typelist_index_of< typelist< Head, Tail >, T >
 
struct  nonstd::variants::detail::typelist_type_at< List, i >
 
struct  nonstd::variants::detail::typelist_type_at< typelist< Head, Tail >, 0 >
 
struct  nonstd::variants::detail::typelist_type_at< typelist< Head, Tail >, i >
 
struct  nonstd::variants::detail::alignment_of< T >
 
struct  nonstd::variants::detail::alignment_of_hack< T >
 
struct  nonstd::variants::detail::alignment_logic< A, S >
 
struct  nonstd::variants::detail::alignment_of< T >
 
struct  nonstd::variants::detail::type_of_size< List, N >
 
struct  nonstd::variants::detail::type_of_size< nulltype, N >
 
struct  nonstd::variants::detail::struct_t< T >
 
struct  nonstd::variants::detail::helper< T0, T1, T2, T3, T4, T5, T6 >
 
class  nonstd::variants::variant< T0, T1, T2, T3, T4, T5, T6 >
 
class  nonstd::variants::monostate
 
struct  nonstd::variants::variant_size< T >
 
struct  nonstd::variants::variant_size< variant< T0, T1, T2, T3, T4, T5, T6 > >
 
struct  nonstd::variants::variant_alternative< I, T >
 
struct  nonstd::variants::variant_alternative< I, variant< T0, T1, T2, T3, T4, T5, T6 > >
 
class  nonstd::variants::bad_variant_access
 
class  nonstd::variants::variant< T0, T1, T2, T3, T4, T5, T6 >
 
union  nonstd::variants::variant< T0, T1, T2, T3, T4, T5, T6 >::aligned_storage_t
 
struct  nonstd::variants::detail::Comparator< Variant >
 

Namespaces

 nonstd
 
 nonstd::detail
 
 nonstd::variants
 
 nonstd::variants::detail
 

Macros

#define NONSTD_VARIANT_LITE_HPP
 
#define variant_lite_VERSION   "1.0.0"
 
#define variant_CONFIG_OMIT_VARIANT_SIZE_V_MACRO   0
 
#define variant_CONFIG_OMIT_VARIANT_ALTERNATIVE_T_MACRO   0
 
#define variant_MSVC_LANG   0
 
#define variant_CPP11_OR_GREATER   ( __cplusplus >= 201103L || variant_MSVC_LANG >= 201103L )
 
#define variant_CPP14_OR_GREATER   ( __cplusplus >= 201402L || variant_MSVC_LANG >= 201703L )
 
#define variant_CPP17_OR_GREATER   ( __cplusplus >= 201703L || variant_MSVC_LANG >= 201703L )
 
#define variant_HAS_INCLUDE(arg)   0
 
#define variant_CONFIG_MAX_ALIGN_HACK   0
 
#define variant_CONFIG_ALIGN_AS_FALLBACK   double
 
#define variant_BETWEEN(v, lo, hi)   ( lo <= v && v < hi )
 
#define variant_COMPILER_MSVC_VERSION   0
 
#define variant_COMPILER_GNUC_VERSION   0
 
#define variant_constexpr   /*constexpr*/
 
#define variant_constexpr14   /*constexpr*/
 
#define variant_noexcept   /*noexcept*/
 
#define variant_nullptr   NULL
 
#define variant_override   /*override*/
 
#define nonstd_lite_in_place_type_t(T)   nonstd::in_place_t(&)( nonstd::detail::in_place_type_tag<T> )
 
#define nonstd_lite_in_place_index_t(T)   nonstd::in_place_t(&)( nonstd::detail::in_place_index_tag<I> )
 
#define nonstd_lite_HAVE_IN_PLACE_TYPES   1
 
#define variant_TL1(T1)   detail::typelist< T1, detail::nulltype >
 
#define variant_TL2(T1, T2)   detail::typelist< T1, variant_TL1( T2) >
 
#define variant_TL3(T1, T2, T3)   detail::typelist< T1, variant_TL2( T2, T3 ) >
 
#define variant_TL4(T1, T2, T3, T4)   detail::typelist< T1, variant_TL3( T2, T3, T4 ) >
 
#define variant_TL5(T1, T2, T3, T4, T5)   detail::typelist< T1, variant_TL4( T2, T3, T4, T5 ) >
 
#define variant_TL6(T1, T2, T3, T4, T5, T6)   detail::typelist< T1, variant_TL5( T2, T3, T4, T5, T6 ) >
 
#define variant_TL7(T1, T2, T3, T4, T5, T6, T7)   detail::typelist< T1, variant_TL6( T2, T3, T4, T5, T6, T7 ) >
 
#define variant_ALIGN_AS(to_align)   typename detail::type_of_size< detail::alignment_types, detail::alignment_of< to_align >::value >::type
 
#define variant_ALIGN_TYPE(type)   typelist< type , typelist< struct_t< type >
 
#define variant_size_V(T)   nonstd::variant_size<T>::value
 
#define variant_alternative_T(I, T)   typename nonstd::variant_alternative<I,T >::type
 

Typedefs

typedef TX< S0 > nonstd::variants::detail::T0
 
typedef TX< S1 > nonstd::variants::detail::T1
 
typedef TX< S2 > nonstd::variants::detail::T2
 
typedef TX< S3 > nonstd::variants::detail::T3
 
typedef TX< S4 > nonstd::variants::detail::T4
 
typedef TX< S5 > nonstd::variants::detail::T5
 
typedef TX< S6 > nonstd::variants::detail::T6
 
typedef nulltype nonstd::variants::detail::alignment_types
 

Functions

template<class T >
in_place_t nonstd::in_place (detail::in_place_type_tag< T >=detail::in_place_type_tag< T >())
 
template<std::size_t I>
in_place_t nonstd::in_place (detail::in_place_index_tag< I >=detail::in_place_index_tag< I >())
 
template<class T >
in_place_t nonstd::in_place_type (detail::in_place_type_tag< T >=detail::in_place_type_tag< T >())
 
template<std::size_t I>
in_place_t nonstd::in_place_index (detail::in_place_index_tag< I >=detail::in_place_index_tag< I >())
 
typedef nonstd::variants::detail::variant_ALIGN_TYPE (char)
 
typedef nonstd::variants::detail::variant_ALIGN_TYPE (short)
 
typedef nonstd::variants::detail::variant_ALIGN_TYPE (int)
 
typedef nonstd::variants::detail::variant_ALIGN_TYPE (long)
 
typedef nonstd::variants::detail::variant_ALIGN_TYPE (float)
 
typedef nonstd::variants::detail::variant_ALIGN_TYPE (double)
 
typedef nonstd::variants::detail::variant_ALIGN_TYPE (char *)
 
typedef nonstd::variants::detail::variant_ALIGN_TYPE (short *)
 
typedef nonstd::variants::detail::variant_ALIGN_TYPE (int *)
 
typedef nonstd::variants::detail::variant_ALIGN_TYPE (long *)
 
typedef nonstd::variants::detail::variant_ALIGN_TYPE (float *)
 
typedef nonstd::variants::detail::variant_ALIGN_TYPE (double *)
 
typedef nonstd::variants::detail::variant_ALIGN_TYPE (long double *)
 
typedef nonstd::variants::detail::variant_ALIGN_TYPE (Unknown(*)(Unknown))
 
typedef nonstd::variants::detail::variant_ALIGN_TYPE (Unknown *Unknown::*)
 
typedef nonstd::variants::detail::variant_ALIGN_TYPE (Unknown(Unknown::*)(Unknown))
 
template<typename T >
std::size_t nonstd::variants::detail::hash (T const &v)
 
variant_constexpr bool nonstd::variants::operator< (monostate, monostate) variant_noexcept
 
variant_constexpr bool nonstd::variants::operator> (monostate, monostate) variant_noexcept
 
variant_constexpr bool nonstd::variants::operator<= (monostate, monostate) variant_noexcept
 
variant_constexpr bool nonstd::variants::operator>= (monostate, monostate) variant_noexcept
 
variant_constexpr bool nonstd::variants::operator== (monostate, monostate) variant_noexcept
 
variant_constexpr bool nonstd::variants::operator!= (monostate, monostate) variant_noexcept
 
template<class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
bool nonstd::variants::holds_alternative (variant< T0, T1, T2, T3, T4, T5, T6 > const &v) variant_noexcept
 
template<class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
R & nonstd::variants::get (variant< T0, T1, T2, T3, T4, T5, T6 > &v, nonstd_lite_in_place_type_t(R)=in_place< R >)
 
template<class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
R constnonstd::variants::get (variant< T0, T1, T2, T3, T4, T5, T6 > const &v, nonstd_lite_in_place_type_t(R)=in_place< R >)
 
template<std::size_t I, class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
variant_alternative< I, variant< T0, T1, T2, T3, T4, T5, T6 > >::type & nonstd::variants::get (variant< T0, T1, T2, T3, T4, T5, T6 > &v, nonstd_lite_in_place_index_t(I)=in_place< I >)
 
template<std::size_t I, class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
variant_alternative< I, variant< T0, T1, T2, T3, T4, T5, T6 > >::type constnonstd::variants::get (variant< T0, T1, T2, T3, T4, T5, T6 > const &v, nonstd_lite_in_place_index_t(I)=in_place< I >)
 
template<class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
detail::add_pointer< T >::type nonstd::variants::get_if (variant< T0, T1, T2, T3, T4, T5, T6 > *pv, nonstd_lite_in_place_type_t(T)=in_place< T >)
 
template<class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
detail::add_pointer< const T >::type nonstd::variants::get_if (variant< T0, T1, T2, T3, T4, T5, T6 > const *pv, nonstd_lite_in_place_type_t(T)=in_place< T >)
 
template<std::size_t I, class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
detail::add_pointer< typename variant_alternative< I, variant< T0, T1, T2, T3, T4, T5, T6 > >::type >::type nonstd::variants::get_if (variant< T0, T1, T2, T3, T4, T5, T6 > *pv, nonstd_lite_in_place_index_t(I)=in_place< I >)
 
template<std::size_t I, class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
detail::add_pointer< const typename variant_alternative< I, variant< T0, T1, T2, T3, T4, T5, T6 > >::type >::type nonstd::variants::get_if (variant< T0, T1, T2, T3, T4, T5, T6 > const *pv, nonstd_lite_in_place_index_t(I)=in_place< I >)
 
template<class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
void nonstd::variants::swap (variant< T0, T1, T2, T3, T4, T5 > &a, variant< T0, T1, T2, T3, T4, T5 > &b) variant_noexcept
 
template<class Visitor , class Variant >
Variant nonstd::variants::visit (Visitor const &vis, Variant const &v)
 
template<class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
bool nonstd::variants::operator== (variant< T0, T1, T2, T3, T4, T5, T6 > const &v, variant< T0, T1, T2, T3, T4, T5, T6 > const &w)
 
template<class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
bool nonstd::variants::operator!= (variant< T0, T1, T2, T3, T4, T5, T6 > const &v, variant< T0, T1, T2, T3, T4, T5, T6 > const &w)
 
template<class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
bool nonstd::variants::operator< (variant< T0, T1, T2, T3, T4, T5, T6 > const &v, variant< T0, T1, T2, T3, T4, T5, T6 > const &w)
 
template<class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
bool nonstd::variants::operator> (variant< T0, T1, T2, T3, T4, T5, T6 > const &v, variant< T0, T1, T2, T3, T4, T5, T6 > const &w)
 
template<class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
bool nonstd::variants::operator<= (variant< T0, T1, T2, T3, T4, T5, T6 > const &v, variant< T0, T1, T2, T3, T4, T5, T6 > const &w)
 
template<class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
bool nonstd::variants::operator>= (variant< T0, T1, T2, T3, T4, T5, T6 > const &v, variant< T0, T1, T2, T3, T4, T5, T6 > const &w)
 

Macro Definition Documentation

◆ nonstd_lite_HAVE_IN_PLACE_TYPES

#define nonstd_lite_HAVE_IN_PLACE_TYPES   1

Definition at line 303 of file variant.hpp.

◆ nonstd_lite_in_place_index_t

#define nonstd_lite_in_place_index_t (   T)    nonstd::in_place_t(&)( nonstd::detail::in_place_index_tag<I> )

Definition at line 301 of file variant.hpp.

◆ nonstd_lite_in_place_type_t

#define nonstd_lite_in_place_type_t (   T)    nonstd::in_place_t(&)( nonstd::detail::in_place_type_tag<T> )

Definition at line 300 of file variant.hpp.

◆ NONSTD_VARIANT_LITE_HPP

#define NONSTD_VARIANT_LITE_HPP

Definition at line 11 of file variant.hpp.

◆ variant_ALIGN_AS

#define variant_ALIGN_AS (   to_align)    typename detail::type_of_size< detail::alignment_types, detail::alignment_of< to_align >::value >::type

Definition at line 619 of file variant.hpp.

◆ variant_ALIGN_TYPE

#define variant_ALIGN_TYPE (   type)    typelist< type , typelist< struct_t< type >

Definition at line 664 of file variant.hpp.

◆ variant_alternative_T

#define variant_alternative_T (   I,
 
)    typename nonstd::variant_alternative<I,T >::type

Definition at line 861 of file variant.hpp.

◆ variant_BETWEEN

#define variant_BETWEEN (   v,
  lo,
  hi 
)    ( lo <= v && v < hi )

Definition at line 116 of file variant.hpp.

◆ variant_COMPILER_GNUC_VERSION

#define variant_COMPILER_GNUC_VERSION   0

Definition at line 127 of file variant.hpp.

◆ variant_COMPILER_MSVC_VERSION

#define variant_COMPILER_MSVC_VERSION   0

Definition at line 121 of file variant.hpp.

◆ variant_CONFIG_ALIGN_AS_FALLBACK

#define variant_CONFIG_ALIGN_AS_FALLBACK   double

Definition at line 112 of file variant.hpp.

◆ variant_CONFIG_MAX_ALIGN_HACK

#define variant_CONFIG_MAX_ALIGN_HACK   0

Definition at line 104 of file variant.hpp.

◆ variant_CONFIG_OMIT_VARIANT_ALTERNATIVE_T_MACRO

#define variant_CONFIG_OMIT_VARIANT_ALTERNATIVE_T_MACRO   0

Definition at line 22 of file variant.hpp.

◆ variant_CONFIG_OMIT_VARIANT_SIZE_V_MACRO

#define variant_CONFIG_OMIT_VARIANT_SIZE_V_MACRO   0

Definition at line 18 of file variant.hpp.

◆ variant_constexpr

#define variant_constexpr   /*constexpr*/

Definition at line 215 of file variant.hpp.

◆ variant_constexpr14

#define variant_constexpr14   /*constexpr*/

Definition at line 221 of file variant.hpp.

◆ variant_CPP11_OR_GREATER

#define variant_CPP11_OR_GREATER   ( __cplusplus >= 201103L || variant_MSVC_LANG >= 201103L )

Definition at line 33 of file variant.hpp.

◆ variant_CPP14_OR_GREATER

#define variant_CPP14_OR_GREATER   ( __cplusplus >= 201402L || variant_MSVC_LANG >= 201703L )

Definition at line 34 of file variant.hpp.

◆ variant_CPP17_OR_GREATER

#define variant_CPP17_OR_GREATER   ( __cplusplus >= 201703L || variant_MSVC_LANG >= 201703L )

Definition at line 35 of file variant.hpp.

◆ variant_HAS_INCLUDE

#define variant_HAS_INCLUDE (   arg)    0

Definition at line 42 of file variant.hpp.

◆ variant_lite_VERSION

#define variant_lite_VERSION   "1.0.0"

Definition at line 13 of file variant.hpp.

◆ variant_MSVC_LANG

#define variant_MSVC_LANG   0

Definition at line 30 of file variant.hpp.

◆ variant_noexcept

#define variant_noexcept   /*noexcept*/

Definition at line 227 of file variant.hpp.

◆ variant_nullptr

#define variant_nullptr   NULL

Definition at line 233 of file variant.hpp.

◆ variant_override

#define variant_override   /*override*/

Definition at line 239 of file variant.hpp.

◆ variant_size_V

#define variant_size_V (   T)    nonstd::variant_size<T>::value

Definition at line 841 of file variant.hpp.

◆ variant_TL1

#define variant_TL1 (   T1)    detail::typelist< T1, detail::nulltype >

Definition at line 378 of file variant.hpp.

◆ variant_TL2

#define variant_TL2 (   T1,
  T2 
)    detail::typelist< T1, variant_TL1( T2) >

Definition at line 379 of file variant.hpp.

◆ variant_TL3

#define variant_TL3 (   T1,
  T2,
  T3 
)    detail::typelist< T1, variant_TL2( T2, T3 ) >

Definition at line 380 of file variant.hpp.

◆ variant_TL4

#define variant_TL4 (   T1,
  T2,
  T3,
  T4 
)    detail::typelist< T1, variant_TL3( T2, T3, T4 ) >

Definition at line 381 of file variant.hpp.

◆ variant_TL5

#define variant_TL5 (   T1,
  T2,
  T3,
  T4,
  T5 
)    detail::typelist< T1, variant_TL4( T2, T3, T4, T5 ) >

Definition at line 382 of file variant.hpp.

◆ variant_TL6

#define variant_TL6 (   T1,
  T2,
  T3,
  T4,
  T5,
  T6 
)    detail::typelist< T1, variant_TL5( T2, T3, T4, T5, T6 ) >

Definition at line 383 of file variant.hpp.

◆ variant_TL7

#define variant_TL7 (   T1,
  T2,
  T3,
  T4,
  T5,
  T6,
  T7 
)    detail::typelist< T1, variant_TL6( T2, T3, T4, T5, T6, T7 ) >

Definition at line 384 of file variant.hpp.