почему g++ ругается?
От: coreduo  
Дата: 23.08.06 03:25
Оценка:
День добрый! Видимо ночь, поэтому не соображаю

template<class _Type> class A
{
public:
typedef typename _Type* iterator;
};

int main()
{
A<int> r;

return 0;
};

g++ версии 4.1.1 ругается:

test.cpp:4: error: expected nested-name-specifier before '_Type'
test.cpp:4: error: expected ';' before '*' token

А мелкософтовский компиллер съедает с удовольствием такую конструкцию.


С уважением,
Михаил Белов
Posted via RSDN NNTP Server 2.0
Re: почему g++ ругается?
От: _Dreamer Россия  
Дата: 23.08.06 03:56
Оценка: 1 (1)
Здравствуйте, coreduo, Вы писали:

C>День добрый! Видимо ночь, поэтому не соображаю


C>template<class _Type> class A

C>{
C>public:
C>typedef typename _Type* iterator;
C>};

C>g++ версии 4.1.1 ругается:


C>test.cpp:4: error: expected nested-name-specifier before '_Type'

C>test.cpp:4: error: expected ';' before '*' token

C>А мелкософтовский компиллер съедает с удовольствием такую конструкцию.


а зачем там ставить typename ? если б было так —
template<class _Type> class A
{
public:
typedef typename some_temlate_class< _Type >::value * iterator;
};

тогда все понятно.
а так — _Type и так тип, и _Type * тоже тип. какая тут неопределенность ?
Re: почему g++ ругается?
От: Shmakov Россия  
Дата: 23.08.06 05:55
Оценка: -2
Предположу, что нужно писать:


template<typename _Type> class A


Проверить не могу, т.к. еще еду на работу в метро.
Re: почему g++ ругается?
От: Dmitry Kotlyarov Россия  
Дата: 24.08.06 07:51
Оценка:
Здравствуйте, coreduo, Вы писали:

C>...

C>g++ версии 4.1.1 ругается:

C>test.cpp:4: error: expected nested-name-specifier before '_Type'

C>test.cpp:4: error: expected ';' before '*' token

Все правильно. Достаточно заглянуть в Стандарт (5.2):

postfix-expression:
  typename ::opt nested-name-specifier identifier ( expression-listopt )


C>А мелкософтовский компиллер съедает с удовольствием такую конструкцию.


Ну, соответствие MSVC Стандарту — известная беда.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.