[英]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.