我有以下模板
template<class F>
struct A{
template<int N>
struct B{
using type = int;
};
};
我想制作模板别名,但是:
//doesn't compile.
template<class F, int N >
using alias_A = typename A<F>::B<N>::type;
GCC:
question.cpp:12:36: error: expected ';' before '::' token
using alias_A = typename A<F>::B<N>::type;
^
question.cpp:12:36: error: 'type' in namespace '::' does not name a type
调试时我发现:
//does compile
struct C{};
using alias_B = typename A<C>::B<0>::type;
有人可以指出我做错了什么吗?我觉得我错过了一些明显的东西。
答案 0 :(得分:4)
你需要告诉C ++内部类型B<N>
是一个模板:
template<class F, int N >
using alias_A = typename A<F>::template B<N>::type;
在这种情况下,编译器将您编写的内容解析为operator<
,而不是模板参数的左括号。
This帖子详细介绍了您何时以及为何需要这样做。