Add Traits::Is{Any,None}Of
This commit is contained in:
parent
5deb077fe5
commit
e4bf7142f5
|
@ -41,6 +41,17 @@ template <typename T, template <typename...> class Template> struct IsSpecializa
|
||||||
template <template <typename...> class Template, typename... Args> struct IsSpecializationOf<Template<Args...>, Template> : Bool<true> {
|
template <template <typename...> class Template, typename... Args> struct IsSpecializationOf<Template<Args...>, Template> : Bool<true> {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <typename... T> struct IsAnyOf : Bool<false> {
|
||||||
|
};
|
||||||
|
template <typename Type, typename OtherType, typename... RemainingTypes>
|
||||||
|
struct IsAnyOf<Type, OtherType, RemainingTypes...> : Conditional<std::is_same<Type, OtherType>, Bool<true>, IsAnyOf<Type, RemainingTypes...>> {
|
||||||
|
};
|
||||||
|
template <typename... T> struct IsNoneOf : Bool<true> {
|
||||||
|
};
|
||||||
|
template <typename Type, typename OtherType, typename... RemainingTypes>
|
||||||
|
struct IsNoneOf<Type, OtherType, RemainingTypes...> : Conditional<std::is_same<Type, OtherType>, Bool<false>, IsNoneOf<Type, RemainingTypes...>> {
|
||||||
|
};
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct IsCString
|
struct IsCString
|
||||||
: Bool<std::is_same<char const *, typename std::decay<T>::type>::value || std::is_same<char *, typename std::decay<T>::type>::value> {
|
: Bool<std::is_same<char const *, typename std::decay<T>::type>::value || std::is_same<char *, typename std::decay<T>::type>::value> {
|
||||||
|
|
|
@ -32,6 +32,15 @@ static_assert(All<Bool<true>, Bool<true>>::value, "All: positive case");
|
||||||
static_assert(!IsSpecializationOf<string, basic_stringbuf>::value, "IsSpecializationOf: negative case");
|
static_assert(!IsSpecializationOf<string, basic_stringbuf>::value, "IsSpecializationOf: negative case");
|
||||||
static_assert(IsSpecializationOf<string, basic_string>::value, "IsSpecializationOf: positive case");
|
static_assert(IsSpecializationOf<string, basic_string>::value, "IsSpecializationOf: positive case");
|
||||||
|
|
||||||
|
static_assert(IsAnyOf<string, string, int, bool>::value, "IsAnyOf: positive case");
|
||||||
|
static_assert(IsAnyOf<int, string, int, bool>::value, "IsAnyOf: positive case");
|
||||||
|
static_assert(IsAnyOf<bool, string, int, bool>::value, "IsAnyOf: positive case");
|
||||||
|
static_assert(!IsAnyOf<unsigned int, string, int, bool>::value, "IsAnyOf: negative case");
|
||||||
|
static_assert(!IsNoneOf<string, string, int, bool>::value, "IsNoneOf: negative case");
|
||||||
|
static_assert(!IsNoneOf<int, string, int, bool>::value, "IsNoneOf: negative case");
|
||||||
|
static_assert(!IsNoneOf<bool, string, int, bool>::value, "IsNoneOf: negative case");
|
||||||
|
static_assert(IsNoneOf<unsigned int, string, int, bool>::value, "IsNoneOf: positive case");
|
||||||
|
|
||||||
static_assert(!IsIteratable<int>::value, "IsIterator: negative case");
|
static_assert(!IsIteratable<int>::value, "IsIterator: negative case");
|
||||||
static_assert(!IsIteratable<SomeStruct>::value, "IsIterator: negative case");
|
static_assert(!IsIteratable<SomeStruct>::value, "IsIterator: negative case");
|
||||||
static_assert(IsIteratable<string>::value, "IsIterator: positive case");
|
static_assert(IsIteratable<string>::value, "IsIterator: positive case");
|
||||||
|
|
Loading…
Reference in New Issue