Есть ли какие-либо изменения в использовании локального класса в C ++ 11?
Кажется, в C ++ 03 локальные классы не могут использоваться в качестве аргумента шаблона (я помню, что).
Рассмотрим этот код,
template<typename T> void f(const T&) {}
//Note : S is a local class defined inside main()
int main() { struct S{}; f(S()); } //I want template argument to be deduced.
Но он выдает ошибку компиляции (режим C ++ 03), говоря ( ideone ):
прог.cpp: 4: ошибка: нет соответствующей функции для вызова 'f (main () :: S)'
Однако, он компилируется нормально при компиляции в режиме C ++ 11 (ideone ), что имеет смысл для меня, иначе лямбда не сработает.Поэтому я предполагаю, что по крайней мере это изменение в использовании локальных классов.Я прав?Какие другие изменения касаются локальных классов?
Пожалуйста, процитируйте соответствующий текст из Стандартов (C ++ 03 и C ++ 11 оба), чтобы читатели могли сравнить себя и для дальнейшего использования.