Статический член класса является статическим членом класса, а не шаблонного класса. Поэтому, что бы инициализировать StaticVar нужен конкретный класс, например, ClassWithStaticVar < int >:
template < > ClassWithStaticVar < int >::MyOwnType ClassWithStaticVar < int >::StaticVar=1;
Соответственно для ClassWithStaticVar < double> StaticVar нужно инициализировать отдельно.
MyOwnType зависит от прараметра шаблона надо юзать typename template <class T> typename ClassWithStaticVar<T>::MyOwnType ClassWithStaticVar<T>::StaticVar;
Sergei
· 11 months ago
Ну это совсем тривиально :) template <class T> typename ClassWithStaticVar<T>::MyOwnType ClassWithStaticVar<T>::StaticVar;
По идее, нужно явно инстанцировать шаблон. Впрочем, проверять это мне сейчас лень, поэтому точно не скажу:)
Merlin
· 11 months ago
template <class T> typename ClassWithStaticVar<T>::MyOwnType ClassWithStaticVar<T>::StaticVar; Типы зависящие от шаблонного параметра должны явно помечатся с помощью typename.
cencio
· 11 months ago
а при чем здесь статическая переменная? а еще, визуал студии до 2003 такой код должны компилить без ошибок :)
то что описано - очень старый прикол, он вылез, когда 2003 визуальник стал немного лучше поддерживать стандарт, и эта ошибка масово полезла в старом коде, фикс тоже стандартен, нужно явно указать typename
template <class T>
typename ClassWithStaticVar<T>::MyOwnType ClassWithStaticVar<T>::StaticVar;
template < >
ClassWithStaticVar < int >::MyOwnType ClassWithStaticVar < int >::StaticVar=1;
Соответственно для ClassWithStaticVar < double> StaticVar нужно инициализировать отдельно.
# typename ClassWithStaticVar<T>::MyOwnType ClassWithStaticVar<T>::StaticVar;
надо юзать typename
template <class T>
typename ClassWithStaticVar<T>::MyOwnType ClassWithStaticVar<T>::StaticVar;
template <class T>
typename ClassWithStaticVar<T>::MyOwnType ClassWithStaticVar<T>::StaticVar;
и comeau (http://www.comeaucomputing.com/pcgi-bin/compile...) со мной согласен
Впрочем, проверять это мне сейчас лень, поэтому точно не скажу:)
Типы зависящие от шаблонного параметра должны явно помечатся с помощью typename.
то что описано - очень старый прикол, он вылез, когда 2003 визуальник стал немного лучше поддерживать стандарт, и эта ошибка масово полезла в старом коде, фикс тоже стандартен, нужно явно указать typename
template <class T>
typename ClassWithStaticVar<T>::MyOwnType ClassWithStaticVar<T>::StaticVar;
typename ClassWithStaticVar<T>::MyOwnType ClassWithStaticVar<T>::StaticVar;