Можно создать дубликат:
Officially, what is typename for?Какова цель "TypeName" в C++
Когда я использую
template <typename TMap>
typename TMap::referent_type * func(TMap & map, typename TMap::key_type key)
{ ... }
какова цель этих двух «TYPENAME «на второй линии?
Кажется, что запускает предупреждение о компиляции (VS2008: C4346), но это только «вы утверждаете, что это тип»?
Фактическая проверка, действительно ли тип TMap::referent_type
набирается при создании экземпляра шаблона, но по-прежнему существует требование по стандарту C++, но код корректно анализируется.
Есть ли примеры, когда на самом деле требуется имя типа для разрешения двусмысленности? Или есть еще кое-что?
Должен признать, что человек с тегом C++ задал такой базовый вопрос о программировании шаблонов. Вы когда-нибудь компилировались с лучшим компилятором, чем Visual Studio? (как в, более соответствует стандарту) –
@Mathieu: Я использовал Watcom C++ 9.0-10.5, «наблюдая», что в нем оживают мельчайшие детали C++, и я использовал Comeau для некоторых тестов - хотя никогда в производстве. Является ли диссидентство VS действительно заслуженным здесь? --- Ключевое понимание, которое я отсутствовал, заключалось в том, что 'T :: SubType * p' будет анализироваться как арифметическое выражение. --- Я не заметил, что у меня есть тег C++, но я знаю, что C++ все еще удивляет меня примерно раз в месяц. – peterchen