有没有办法测试类型有" bool运算符==(const类型&,const类型&)"在编译时间?

时间:2016-08-12 09:38:07

标签: c++

我写了一个类来测试" type == type"但是当type没有operator ==;

时失败
Spring

有人可以帮忙吗? 或者写一个这样的课是不可能的......

1 个答案:

答案 0 :(得分:7)

您的第一次test重载不应该是一个模板,因为_Type无法推断出来并且无论如何都不重要:

double _test(...){
    return 0;
}

Live Demo

使用C ++ 17 std::void_t(你可以很容易地为C ++ 11实现),你可以用更少的样板来实现同样的目的:

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

template <typename T>
struct has_equal_to<T, 
         std::void_t<decltype(std::declval<T>() == std::declval<T>())>>
: std::true_type{};

Live Demo

或者您可以使用std::experimental::is_detected甚至更少:

template <typename T>
using equal_to_t = decltype(std::declval<T>() == std::declval<T>());

template <typename T>
using has_equal_to = std::experimental::is_detected<equal_to_t, T>;

Live Demo

在一个不相关的说明中,你不应该使用以下划线开头的名字;他们将保留给实施。