私は別のクラステンプレートの中にクラステンプレートを持っています。内部クラスには静的データメンバーがあります。私はそれを定義するのに苦労しています。私はgccを幸せにするために何を得たかテンプレート化されたクラス内でテンプレート化されたクラスの静的データメンバーを定義する
error: template definition of non-template ‘int Out<T>::In<U>::var’
int Out<T>::template In<U>::var;
^~~
:以下の例は、GCC-7.1
template <typename T>
struct Out {
template <typename U>
struct In {
static int var;
};
};
template <typename T>
template <typename U>
int Out<T>::template In<U>::var;
のgccで打ち鳴らす3.8で動作しますが、いないはエラーになりますか?
編集:結局のところ、この仕事にするtemplate
を取り払う:、まだ疑問が残り
template <typename T>
template <typename U>
int Out<T>::In<U>::var;
をtemplate
ここで許可されていますか?
許可されていますが、必要です。この時点で、Out :: Inがtypename/member/templateであるかどうかは、コンパイラは認識しません。それはメンバーを推測し、あなたが ::を望んでいると推測します。これはエラーです。上記のように、より新しいgccは、ここで有用な診断を提供します。以前はずっと悪かったです。 –
lorro
@lorro私はそれがあなたが与えた理由のために必要だと思った。私の混乱は –