template specialization中的type会继续计算吗?
The type in template specialization will be continue to calculate?
就像这些代码一样,在模板特化中定义了类型,将是类型(在标签1处),代码test_two<N+1, Max, std::size_t>
继续匹配模板特化(struct test_two<N,Max,std::size_t>
)和计算 test_two<N+1, Max, std::size_t>
的类型等等?
template<std::size_t N, std::size_t Max, typename T>
struct test_two
{
};
template<std::size_t N, std::size_t Max>
struct test_two<N,Max,std::size_t>
{
using type = test_two<N+1, Max, std::size_t> //label:1
};
同上
声明using type = test_two<N+1, Max, std::size_t>;
不需要right-hand-side类型完整,所以不会实例化test_two<N+1, Max, std::size_t>
的定义,只实例化它的声明。因此没有无限递归。
就像这些代码一样,在模板特化中定义了类型,将是类型(在标签1处),代码test_two<N+1, Max, std::size_t>
继续匹配模板特化(struct test_two<N,Max,std::size_t>
)和计算 test_two<N+1, Max, std::size_t>
的类型等等?
template<std::size_t N, std::size_t Max, typename T>
struct test_two
{
};
template<std::size_t N, std::size_t Max>
struct test_two<N,Max,std::size_t>
{
using type = test_two<N+1, Max, std::size_t> //label:1
};
同上
声明using type = test_two<N+1, Max, std::size_t>;
不需要right-hand-side类型完整,所以不会实例化test_two<N+1, Max, std::size_t>
的定义,只实例化它的声明。因此没有无限递归。