C++03 標準のテンプレートの章は、次のように始まります。
テンプレートは、クラスまたは関数のファミリを定義します。
テンプレート宣言: export opt template < template-parameter-list > 宣言 テンプレート パラメータ リスト: テンプレート パラメータ テンプレート パラメータ リスト、テンプレート パラメータ
テンプレート宣言の宣言は 、
— 関数またはクラスを宣言または定義する、または
—クラステンプレートまたはクラステンプレート内にネストされたクラス のメンバー関数、メンバークラス、または静的データメンバーを定義する、または
— クラスまたはクラス テンプレートのメンバー テンプレートを定義します。
テンプレート宣言は宣言です。宣言が関数、クラス、または静的データ メンバーを定義する場合、テンプレート宣言も定義です。
したがって、太字のテキストを読んで理解していることは、 class -templateとfunction-templateに加えて、static data-member-templateを定義できるということです。しかし、私はstatic data-member-template を見たことがありません。それはどのように正確に定義されていますか?次のことを試しましたが、GCC はそれを受け入れません ( ideone ):
template<typename T> struct X{};
template<typename T>
struct A
{
template<typename U> static X<U> data_member;
};
それで、引用を正しく理解しているかどうか、自分自身を疑うようになりました。私は正確に何が欠けていますか?または、静的データ メンバー テンプレートをどのように正確に定義できますか? 太字のテキストはどういう意味ですか?