Статическая переменная шаблонного класса (VS 2010)
От: glap  
Дата: 21.05.11 19:50
Оценка:
template <class T>
struct AA
{
    T t;
};

template <class T>
struct BB
{
    struct CC
    {
        int i;
    };
    typedef AA<CC> AACC;
    static AACC a;
};

template <class T>
BB<T>::AACC BB<T>::a;

int main()
{
    BB<int>::a.t.i = 0;
}


Comeau кушает за обе щёки, а вот студия ругает:


error C2143: синтаксическая ошибка: отсутствие ";" перед "BB<T>::a"


Это лечится?
Re: Статическая переменная шаблонного класса (VS 2010)
От: _niko_ Россия  
Дата: 21.05.11 19:59
Оценка: 3 (2)
Здравствуйте, glap, Вы писали:

G>
G>template <class T>
G>struct AA
G>{
G>    T t;
G>};

G>template <class T>
G>struct BB
G>{
G>    struct CC
G>    {
G>        int i;
G>    };
G>    typedef AA<CC> AACC;
G>    static AACC a;
G>};

G>template <class T>
G>BB<T>::AACC BB<T>::a;

G>int main()
G>{
G>    BB<int>::a.t.i = 0;
G>}
G>


G>Comeau кушает за обе щёки, а вот студия ругает:



G>

G>error C2143: синтаксическая ошибка: отсутствие ";" перед "BB<T>::a"


G>Это лечится?



а то

template<class T>
typename BB<T>::AACC BB<T>::a;
Re[2]: Статическая переменная шаблонного класса (VS 2010)
От: glap  
Дата: 21.05.11 22:13
Оценка:
Ага, спасибо.

Мне ещё интересует вопрос по разборщику МС. Почему тут ему нужно помогать, а комо сама сообразила? Они как-то выйгрывают этим в скорости разбора или что? Тут ведь всё предельно просто на первый взгляд.
Re[3]: Статическая переменная шаблонного класса (VS 2010)
От: glap  
Дата: 21.05.11 22:16
Оценка:
Здравствуйте, glap, Вы писали:

G>Ага, спасибо.


G>Мне ещё интересует вопрос по разборщику МС. Почему тут ему нужно помогать, а комо сама сообразила? Они как-то выйгрывают этим в скорости разбора или что? Тут ведь всё предельно просто на первый взгляд.


Выходит, что МС не знает что такое ААСС на этом этапе разбора. Видимо из-за его шаблонной зависимости, что не очень очевидно, ведь он должен один раз перед инстанцированием пробежаться и на основании того, что Т это тип, всё возможное уже записать в область видимости этого шаблона.
Re[3]: Статическая переменная шаблонного класса (VS 2010)
От: баг  
Дата: 22.05.11 12:32
Оценка: +1
Здравствуйте, glap, Вы писали:

G>Ага, спасибо.


G>Мне ещё интересует вопрос по разборщику МС. Почему тут ему нужно помогать, а комо сама сообразила? Они как-то выйгрывают этим в скорости разбора или что? Тут ведь всё предельно просто на первый взгляд.

По умолчанию в Comeau стоит с++0х, а там typename не нужен в этом случае.
Re[4]: Статическая переменная шаблонного класса (VS 2010)
От: glap  
Дата: 22.05.11 14:16
Оценка:
Здравствуйте, баг, Вы писали:

баг>Здравствуйте, glap, Вы писали:


G>>Ага, спасибо.


G>>Мне ещё интересует вопрос по разборщику МС. Почему тут ему нужно помогать, а комо сама сообразила? Они как-то выйгрывают этим в скорости разбора или что? Тут ведь всё предельно просто на первый взгляд.

баг>По умолчанию в Comeau стоит с++0х, а там typename не нужен в этом случае.

А почему был нужен? В прежнем стандарте возможны какие-то неоднозначности?
Re[4]: Статическая переменная шаблонного класса (VS 2010)
От: glap  
Дата: 22.05.11 14:18
Оценка:
Здравствуйте, баг, Вы писали:

баг>Здравствуйте, glap, Вы писали:


G>>Ага, спасибо.


G>>Мне ещё интересует вопрос по разборщику МС. Почему тут ему нужно помогать, а комо сама сообразила? Они как-то выйгрывают этим в скорости разбора или что? Тут ведь всё предельно просто на первый взгляд.

баг>По умолчанию в Comeau стоит с++0х, а там typename не нужен в этом случае.

Отключил c++0x расширение в комо. Результат не изменился. Никаких ошибок.
Re[5]: Статическая переменная шаблонного класса (VS 2010)
От: Аноним  
Дата: 23.05.11 09:39
Оценка:
Здравствуйте, glap, Вы писали:

G>>>Ага, спасибо.

G>>>Мне ещё интересует вопрос по разборщику МС. Почему тут ему нужно помогать, а комо сама сообразила? Они как-то выйгрывают этим в скорости разбора или что? Тут ведь всё предельно просто на первый взгляд.
баг>>По умолчанию в Comeau стоит с++0х, а там typename не нужен в этом случае.
G>Отключил c++0x расширение в комо. Результат не изменился. Никаких ошибок.
Попробуй совместимость с расширениями MS ещё выключить.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.