DISQUS

codeBlogZ: Что не так: задачка на знание шаблонов

  • Lazin · 11 months ago
    очевидно-же
    template <class T>
    typename ClassWithStaticVar<T>::MyOwnType ClassWithStaticVar<T>::StaticVar;
  • sash_ko · 11 months ago
    Статический член класса является статическим членом класса, а не шаблонного класса. Поэтому, что бы инициализировать StaticVar нужен конкретный класс, например, ClassWithStaticVar < int >:

    template < >
    ClassWithStaticVar < int >::MyOwnType ClassWithStaticVar < int >::StaticVar=1;

    Соответственно для ClassWithStaticVar < double> StaticVar нужно инициализировать отдельно.
  • darkangel · 11 months ago
    # template <class T>
    # typename ClassWithStaticVar<T>::MyOwnType ClassWithStaticVar<T>::StaticVar;
  • yuri · 11 months ago
    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;
  • Alek · 11 months ago
    правильный ответ - по стандарту C++ нету здесь никакой ошибки компиляции
    и comeau (http://www.comeaucomputing.com/pcgi-bin/compile...) со мной согласен
  • vsv · 11 months ago
    По идее, нужно явно инстанцировать шаблон.
    Впрочем, проверять это мне сейчас лень, поэтому точно не скажу:)
  • 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;
  • Necromant · 11 months ago
    Нужно использовать typename
    typename ClassWithStaticVar<T>::MyOwnType ClassWithStaticVar<T>::StaticVar;