c++ - 使用enable_if 的模板类定义会导致错误

标签 c++ templates c++14 enable-if

有人可以帮助我理解为什么以下代码无法编译并帮助我修复它:

template< size_t N_1, size_t N_2, typename callable, typename T_out = typename std::result_of<callable>::type, size_t N = N_1 - N_2, std::enable_if_t< N_1>=N_2>* = nullptr>
class A
{
  template<std::size_t... I>
  void foo();
};


template< size_t N_1, size_t N_2, typename callable >
template<std::size_t... I>
void A< N_1, N_2, callable>::foo()
{
}

错误:

error: nested name specifier 'A<N_1, N_2, callable>::' for declaration does not refer into a class, class template or class template partial specialization
    void A< N_1, N_2, callable>::foo()
         ~~~~~~~~~~~~~~~~~~~~~~~~^
1 error generated.

提前非常感谢。

最佳答案

模板声明的定义需要与声明匹配。 std::enable_if_t 确实在这里抛出了一个曲线球,但这似乎适用于 gcc 6.2:

template< size_t N_1, size_t N_2, typename callable, typename T_out, size_t N,
      std::enable_if_t< N_1 >= N_2> *p>
template<std::size_t... I>
void A< N_1, N_2, callable, T_out, N, p>::foo()
{
}

关于c++ - 使用enable_if 的模板类定义会导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40262340/

相关文章:

c++ - cctype 是怎么回事?

c++ - 为什么我不能打印出我的字符串数组 C++?

python - Flask 模板扩展问题

c++ - 改变成员 vector 的类型

c++ - 自动返回函数和模板实例化

c++ - 如何解决 lint 错误 "Reference initialization causes loss of const/volatile integrity"

c++ - 使用 <list> C++ 编译时出错

c++ - C++ sprintf删除未定义的行为

c++ - 为右值和左值引用重载工厂函数 - 高效初始化

c++ - 我应该将临时变量 move 到变量中吗?