C ++嵌套模板错误

时间:2016-04-01 19:03:49

标签: c++ sfinae decltype

我有几个模板可以检查,是否为某些类型定义了某个运算符,我还检查了表达式返回类型。当我使用某些类型实例化此模板时,一切正常,但对于某些类型,我在MSVC中遇到内部编译器错误。在GCC中,我得到"模板参数无效"错误。当我实例化后增量检查时,这是造成麻烦的行:

template <typename _Type, typename _ReturnType>
static auto test(_Type&& var, _ReturnType&&)
-> decltype(std::enable_if_t<std::is_same<_ReturnType, decltype((var) OPERATOR)>>(), std::true_type());

这段代码有什么问题吗?

注意:操作员是宏扩展到我想要检查的操作员。整个模板是更大的宏的一部分,我用它来避免代码重复。

1 个答案:

答案 0 :(得分:0)

我认为问题是std::enable_if_t期望bool,但您不能通过std::is_same提供一个std::is_same。要获得value的结果,您必须访问变量template <typename _Type, typename _ReturnType> static auto test(_Type&& var, _ReturnType&&) -> decltype(std::enable_if_t<std::is_same<_ReturnType, decltype((var) OPERATOR)>::value>(), std::true_type()); (具有检查结果)。

var result = activity.Where(a => a.UserId == userId || a.ClassId == classId).FirstOrDefault();