【问题标题】:C++ nested template errorC++ 嵌套模板错误
【发布时间】:2016-04-01 19:03:48
【问题描述】:

我有几个模板可以检查是否为某种类型定义了某些运算符,并且我还检查了表达式返回类型。当我用某些类型实例化此模板时,一切正常,但对于某些类型,我在 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());

这段代码有什么问题吗?

注意:OPERATOR 是宏扩展为我要检查的运算符。整个模板是我用来避免代码重复的更大宏的一部分。

【问题讨论】:

标签: c++ sfinae decltype


【解决方案1】:

我认为问题在于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());

【讨论】:

  • 不要键入特征定义 operator() 以返回其 ::value 值?
  • @Rerito 他们这样做了,但仅从 C++14 开始
猜你喜欢
  • 2021-11-10
  • 1970-01-01
  • 2018-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多