[英]aliased templates in nested classes
我正在尝试从C的实例开始获取T2<B>
的模板别名。
template<typename A>
struct T1
{
template<typename B>
struct T2{};
};
template<typename A>
class C
{
T1<A> t;
};
template<typename A>
using U1=decltype(C<A>::t);
template<typename A, typename B>
using U2=typename U1<A>::T2<B>;
我在gcc 4.8中遇到编译器故障:
gg.cc:18:28: error: expected ‘;’ before ‘<’ token
using U2=typename U1<A>::T2<B>;
我在每个明智的位置都使用typename关键字,但是无法编译U2定义。
正确的语法是什么? 如果我不求助于U1而得到U2的定义,那就更好了。
编译器编译以下内容时:
template<typename A, typename B>
using U2=typename U1<A>::T2<B>;
在读取嵌套名称说明符U1<A>::
之后,由于A
是未知的,所以它不知道它在U1
哪个专业领域中。 每个U1
专业化可能完全不同,并且取决于A
是什么。 因此,不知道T1
是什么样的名称。 特别是它不知道它是否是模板名称。 (例如, U1<int>::T1
可能与U1<char>::T1
完全不同。)
因此,您需要通过在T1
之前使用template
关键字来明确告知编译器T1
将是模板名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.