enable_if 的模板 class 定义导致错误
Template class definition with enable_if causes error
有人可以帮我理解为什么以下代码无法编译并帮助我修复它吗:
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()
{
}
有人可以帮我理解为什么以下代码无法编译并帮助我修复它吗:
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()
{
}