C ++ 11 статические утверждают на равенство сопоставимых типов?

Как static_assert тип шаблона является концепция EqualityComparable в C ++ 11?

3

Решение

Вы можете использовать следующую черту типа:

#include <type_traits>

template<typename T, typename = void>
struct is_equality_comparable : std::false_type
{ };

template<typename T>
struct is_equality_comparable<T,
typename std::enable_if<
true,
decltype(std::declval<T&>() == std::declval<T&>(), (void)0)
>::type
> : std::true_type
{
};

Что бы вы проверили следующим образом:

struct X { };
struct Y { };

bool operator == (X const&, X const&) { return true; }

int main()
{
static_assert(is_equality_comparable<int>::value, "!"); // Does not fire
static_assert(is_equality_comparable<X>::value, "!"); // Does not fire
static_assert(is_equality_comparable<Y>::value, "!"); // Fires!
}

Вот живой пример.

17

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]