21 Stimmen

Lokale Klassen: C++03 vs. C++11

Gibt es eine Änderung bei der Verwendung lokaler Klassen in C++11?

Es scheint, dass in C++03 lokale Klassen nicht als Template-Argument verwendet werden können (ich erinnere mich daran).

Betrachten Sie diesen Code,

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.

Aber es gibt einen Kompilierungsfehler (C++03-Modus), der besagt ( ideone ) :

prog.cpp:4: Fehler: keine passende Funktion für den Aufruf von 'f(main()::S)'

Es lässt sich jedoch gut kompilieren, wenn es im C++11-Modus kompiliert wird ( ideone ), was für mich Sinn macht, denn sonst würde Lambda nicht funktionieren. Ich vermute also, dass es zumindest diese Änderung in der Verwendung von lokalen Klassen gibt. Liege ich da richtig? Was sind weitere Änderungen in Bezug auf lokale Klassen?

Bitte zitieren Sie den entsprechenden Text aus den Standards (C++03 und C++11), damit die Leser selbst vergleichen können und für zukünftige Referenzen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X