我有几个模板可以检查,是否为某些类型定义了某个运算符,我还检查了表达式返回类型。当我使用某些类型实例化此模板时,一切正常,但对于某些类型,我在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());
这段代码有什么问题吗?
注意:操作员是宏扩展到我想要检查的操作员。整个模板是更大的宏的一部分,我用它来避免代码重复。
答案 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();