#include <iterator>
#include <type_traits>
Go to the source code of this file.
|
| Traits |
| Contains traits for conveniently exploiting SFINAE.
|
|
|
template<typename If , typename Then , typename Else > |
using | Traits::Conditional = typename std::conditional< If::value, Then, Else >::type |
|
template<typename T > |
using | Traits::Not = Bool<!T::value > |
|
template<typename... Condition> |
using | Traits::EnableIf = typename std::enable_if< All< Condition... >::value, Detail::Enabler >::type |
|
template<typename... Condition> |
using | Traits::DisableIf = typename std::enable_if<!All< Condition... >::value, Detail::Enabler >::type |
|
template<typename... Condition> |
using | Traits::EnableIfAny = typename std::enable_if< Any< Condition... >::value, Detail::Enabler >::type |
|
template<typename... Condition> |
using | Traits::DisableIfAny = typename std::enable_if<!Any< Condition... >::value, Detail::Enabler >::type |
|
◆ CPP_UTILITIES_PP_COMMA
#define CPP_UTILITIES_PP_COMMA , |
The CPP_UTILITIES_PP_COMMA macro helps passing "," as a macro argument.
Definition at line 55 of file traits.h.
◆ CPP_UTILITIES_TRAITS_DEFINE_TYPE_CHECK
#define CPP_UTILITIES_TRAITS_DEFINE_TYPE_CHECK |
( |
|
CheckName, |
|
|
|
CheckCode |
|
) |
| |
Value:namespace Detail { \
template <typename T> auto CheckName(int) -> decltype(CheckCode, Bool<true>{}); \
template <typename T> Bool<false> CheckName(...); \
} \
template <typename T> using CheckName = decltype(Detail::CheckName<T>(0))
The CPP_UTILITIES_TRAITS_DEFINE_TYPE_CHECK macro defines a type trait for checking whether some operation can be done with a particular type.
- See also
- Traits::HasSize or Traits::IsIteratable for an example how to use it.
Definition at line 63 of file traits.h.