Локальные классы: 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 оба), чтобы читатели могли сравнить себя и для дальнейшего использования.

Ответы на вопрос(3)

Ваш ответ на вопрос