Ответ 1
Это запрещено в С++ 11.
A typedef
- это объявление. (см. раздел 7.1.3)
A template
не может быть обновлен в пределах его области (включая вложенные области). (см. раздел 14.6.1.6)
Если у меня есть класс шаблона:
template<typename Layout>
class LayoutHandler : Handler {
};
и я хочу разоблачить параметр Layout для пользователя класса. Тогда:
template<typename Layout>
class LayoutHandler : Handler {
public:
typedef Layout Layout; // using the same name
};
VS2012 может скомпилировать этот код и дать ожидаемый результат. (Я использую std:: is_same, чтобы проверить его.) Разрешено ли это в стандартном С++ 03 или С++ 11?
Это запрещено в С++ 11.
A typedef
- это объявление. (см. раздел 7.1.3)
A template
не может быть обновлен в пределах его области (включая вложенные области). (см. раздел 14.6.1.6)
Нет до C + 11, вы не можете его использовать, это дает вам ошибку.
Объявление 'typedef Layout LayoutHandler:: Макет error: shadows template parm 'class Layout