2016-07-22 5 views
2
template <typename T> 
struct A 
{ 
    template <typename T1> 
    struct B {}; 
}; 

template <typename T> 
using b = A<T>::B; 

上記の行はコンパイルを拒否します。C++でクラステンプレートの別名を付けることはできますか?

打ち鳴らすには、このエラーを与える:クラステンプレートの 使用「< Tを> :: type」はBがテンプレートであるため、テンプレート引数に

+3

を提供する必要があり、 :: Bは依存型です。 – Borgleader

+0

'struct A'は、' A :: B'(例えば)がタイプの代わりに静的変数になるテンプレート特殊化を持つことができます。だから、コンパイラのために、 'A :: B'が型の前に' typename'を書くことによって期待していると指定しなければなりません。 – KABoissonneault

答えて

3

を必要とし、それは型名を欠落しているテンプレート引数に

template <typename T> 
struct A 
{ 
    template <typename T1> 
    struct B {}; 
}; 

template <typename T,typename T1> 
using b = typename A<T>::template B<T1>; 
関連する問題