Локальные классы: C ++ 03 против C ++ 11

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

21
задан Nawaz 20 November 2011 в 18:49
поделиться