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

时间:2016-10-26 12:29:02

标签: 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.

非常感谢提前。

1 个答案:

答案 0 :(得分:2)

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

std::enable_if_t