Есть ли какие-либо изменения в использовании локального класса в C ++ 11?
Кажется, в C ++ 03 локальные классы не могут использоваться в качестве аргумента шаблона (я помню это).
Рассмотрим этот код,
template 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 ):
prog.cpp: 4: error: нет соответствующей функции для вызова to 'f (main () :: S)'
Однако он отлично компилируется при компиляции в режиме C ++ 11 ( ideone ), что имеет смысл для меня, иначе лямбда не Работа. Итак, я предполагаю, что, по крайней мере, это изменение в использовании локальных классов. Я прав? Какие еще изменения касаются локальных классов?
Пожалуйста, процитируйте соответствующий текст из Стандартов (C ++ 03 и C ++ 11 оба), чтобы читатели могли сравнить себя и для дальнейшего использования.