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