Глава о шаблонах в стандарте C++03 начинается со следующего:
шаблон определяет семейство классов или функций.
template-declaration: exportopt template < template-parameter-list > declaration template-parameter-list: template-parameter template-parameter-list , template-parameter
объявление в шаблоне-объявлении должно
— объявить или определить функцию или класс, или
— определить функцию-член, класс-член или статический элемент данных шаблона класса или класса, вложенного в шаблон класса, или
— определить шаблон члена класса или шаблон класса.
шаблон-декларация — это декларация. Объявление-шаблона также является определением, если его объявление определяет функцию, класс или статический элемент данных.
Из того, что я понимаю, читая полужирный текст, мы можем определить static data-member-template в дополнение к class -template и < em>шаблон функции. Но я никогда не видел статический шаблон данных-члена. Как именно он определяется? Я попробовал следующее, но GCC не принимает его (ideone):
template<typename T> struct X{};
template<typename T>
struct A
{
template<typename U> static X<U> data_member;
};
Поэтому я начал сомневаться в себе, правильно ли я понял цитату. Что именно мне не хватает? Или как именно мы можем определить статический шаблон члена данных? Что означает жирный текст?