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