class | typename
От: Denwer Россия  
Дата: 04.02.04 11:35
Оценка:
Везде написано что ключевое слово typename в параметре шаблона равносильно слову class. Но вот такую вещь VC7.1 не принял при такой замене.

template<template<typename tchar> typename Rules, typename tchar = char>
class parser : ..................
................

Если заменить typename на class то cкомпиляет.
Это его недостаток или же это так и должно быть?
Re: class | typename
От: Bell Россия  
Дата: 04.02.04 11:40
Оценка:
Здравствуйте, Denwer, Вы писали:


Для template — template параметров должно использоваться ключевое слово class
Так что VC7.1 абсолютно прав.
Любите книгу — источник знаний (с) М.Горький
Re: class | typename
От: Lorenzo_LAMAS  
Дата: 04.02.04 11:41
Оценка: :)
Потому, что здесь может быть только class.

Оффтоп

Липпман рассказывал, как к нему подошел какой-то человек (не помню кто) и пожаловался, что cfront не позволяет использовать в шаблонах ключевое слово struct. Липпман не смог ему толком объяснить почему это так, и чтоб отвязался — добавил такую фичу и сказал ехидно — вот так рождаются диалекты (все это мой вольный пересказ)
Of course, the code must be complete enough to compile and link.
Re: class | typename
От: Анатолий Широков СССР  
Дата: 04.02.04 11:42
Оценка: 7 (3)
Здравствуйте, Denwer, Вы писали:

D>Везде написано что ключевое слово typename в параметре шаблона равносильно слову class. Но вот такую вещь VC7.1 не принял при такой замене.


D>
D>template<template<typename tchar> typename Rules, typename tchar = char>
D>class parser : ..................
D>................
D>

D>Если заменить typename на class то cкомпиляет.
D>Это его недостаток или же это так и должно быть?

template<template<typename tchar> typename Rules, typename tchar = char>
template<template<typename tchar> class Rules, typename tchar = char>

В данном случае (выделено жирным) замена совсем не равнозначна.
Re[2]: class | typename
От: gribunin Россия  
Дата: 04.02.04 12:34
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

L_L>Потому, что здесь может быть только class.


L_L>Оффтоп


L_L>Липпман рассказывал, как к нему подошел какой-то человек (не помню кто) и пожаловался, что cfront не позволяет использовать в шаблонах ключевое слово struct. Липпман не смог ему толком объяснить почему это так, и чтоб отвязался — добавил такую фичу и сказал ехидно — вот так рождаются диалекты (все это мой вольный пересказ)


struct -- это же ключевое слово С, а С++ обеспечивал совместимость с С. Так что компиляция этого слова была добавлена вообще не по прихоти Липпмана.
----------------
Кирилл Грибунин
Re[3]: class | typename
От: Lorenzo_LAMAS  
Дата: 04.02.04 13:07
Оценка:
G>struct -- это же ключевое слово С, а С++ обеспечивал совместимость с С. Так что компиляция этого слова была добавлена вообще не по прихоти Липпмана.

Спасибо за науку. Только читай внимательнее впредь. Я говорил о таком
template<struct T>
class A{};


Где здесь совместимость с С? Где здесь С++ ?
Of course, the code must be complete enough to compile and link.
Re[4]: class | typename
От: Vamp Россия  
Дата: 04.02.04 13:30
Оценка:
L_L>
L_L>template<struct T>
L_L>class A{};
L_L>


Это какой компилятор такое компилирует?
Да здравствует мыло душистое и веревка пушистая.
Re[5]: class | typename
От: Lorenzo_LAMAS  
Дата: 04.02.04 13:31
Оценка:
V>Это какой компилятор такое компилирует?

В наше время — никакой. В свое время — компилятор (cfront) Стена Липпмана.
Of course, the code must be complete enough to compile and link.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.