mirror of
https://github.com/ETLCPP/etl.git
synced 2026-11-09 14:49:53 +08:00
Added variadic 'is_one_of'
This commit is contained in:
parent
7c77bc80b2
commit
f1777dce37
@ -314,6 +314,13 @@ namespace etl
|
||||
template <typename T> struct is_trivially_copy_assignable : etl::is_pod<T> {};
|
||||
#endif
|
||||
|
||||
#if ETL_CPP11_SUPPORTED
|
||||
/// is_rvalue_reference
|
||||
///\ingroup type_traits
|
||||
template <class T> struct is_rvalue_reference : etl::false_type {};
|
||||
template <class T> struct is_rvalue_reference<T&&> : etl::true_type {};
|
||||
#endif
|
||||
|
||||
/// conditional
|
||||
///\ingroup type_traits
|
||||
template <bool B, typename T, typename F> struct conditional { typedef T type; };
|
||||
@ -335,7 +342,7 @@ namespace etl
|
||||
struct conditional_integral_constant<false, T, TRUE_VALUE, FALSE_VALUE>
|
||||
{
|
||||
ETL_STATIC_ASSERT(etl::is_integral<T>::value, "Not an integral type");
|
||||
static const T value = FALSE_VALUE;
|
||||
static const T value = FALSE_VALUE;
|
||||
};
|
||||
|
||||
/// make_signed
|
||||
@ -480,19 +487,40 @@ namespace etl
|
||||
///\ingroup type_traits
|
||||
template <> struct alignment_of<void> : integral_constant <size_t, 0>{};
|
||||
|
||||
#if ETL_CPP11_SUPPORTED
|
||||
|
||||
//***************************************************************************"
|
||||
/// Template to determine if a type is one of a specified list.
|
||||
///\ingroup types
|
||||
//***************************************************************************"
|
||||
template <typename T, typename T1, typename... TRest>
|
||||
struct is_one_of
|
||||
{
|
||||
static const bool value = etl::is_same<T, T1>::value ||
|
||||
etl::is_one_of<T, TRest...>::value;
|
||||
};
|
||||
|
||||
template <typename T, typename T1>
|
||||
struct is_one_of<T, T1>
|
||||
{
|
||||
static const bool value = etl::is_same<T, T1>::value;
|
||||
};
|
||||
|
||||
#else
|
||||
|
||||
//***************************************************************************
|
||||
/// Template to determine if a type is one of a specified list.
|
||||
///\ingroup types
|
||||
//***************************************************************************
|
||||
template <typename T,
|
||||
typename T1, typename T2 = void, typename T3 = void, typename T4 = void,
|
||||
typename T5 = void, typename T6 = void, typename T7 = void, typename T8 = void,
|
||||
typename T9 = void, typename T10 = void, typename T11 = void, typename T12 = void,
|
||||
typename T13 = void, typename T14 = void, typename T15 = void, typename T16 = void,
|
||||
typename T1, typename T2 = void, typename T3 = void, typename T4 = void,
|
||||
typename T5 = void, typename T6 = void, typename T7 = void, typename T8 = void,
|
||||
typename T9 = void, typename T10 = void, typename T11 = void, typename T12 = void,
|
||||
typename T13 = void, typename T14 = void, typename T15 = void, typename T16 = void,
|
||||
typename T17 = void>
|
||||
struct is_one_of
|
||||
{
|
||||
static const bool value =
|
||||
static const bool value =
|
||||
etl::is_same<T, T1>::value ||
|
||||
etl::is_same<T, T2>::value ||
|
||||
etl::is_same<T, T3>::value ||
|
||||
@ -512,6 +540,8 @@ namespace etl
|
||||
etl::is_same<T, T17>::value;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
//***************************************************************************
|
||||
// A set of templates to allow related types to be derived.
|
||||
//***************************************************************************
|
||||
|
||||
@ -499,6 +499,27 @@ namespace etl
|
||||
///\ingroup type_traits
|
||||
template <> struct alignment_of<void> : integral_constant <size_t, 0>{};
|
||||
|
||||
#if ETL_CPP11_SUPPORTED
|
||||
|
||||
//***************************************************************************"
|
||||
/// Template to determine if a type is one of a specified list.
|
||||
///\ingroup types
|
||||
//***************************************************************************"
|
||||
template <typename T, typename T1, typename... TRest>
|
||||
struct is_one_of
|
||||
{
|
||||
static const bool value = etl::is_same<T, T1>::value ||
|
||||
etl::is_one_of<T, TRest...>::value;
|
||||
};
|
||||
|
||||
template <typename T, typename T1>
|
||||
struct is_one_of<T, T1>
|
||||
{
|
||||
static const bool value = etl::is_same<T, T1>::value;
|
||||
};
|
||||
|
||||
#else
|
||||
|
||||
/*[[[cog
|
||||
import cog
|
||||
cog.outl("//***************************************************************************")
|
||||
@ -524,6 +545,8 @@ namespace etl
|
||||
]]]*/
|
||||
/*[[[end]]]*/
|
||||
|
||||
#endif
|
||||
|
||||
//***************************************************************************
|
||||
// A set of templates to allow related types to be derived.
|
||||
//***************************************************************************
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user