2014-06-15 10 views
16

Während ich die GCC 4.9.0 Release-Änderungen here sah, war ich angenehm überrascht, Folgendes zu lesen; unter dem „neuen Sprachen und Sprachspezifische Verbesserungen“ Abschnitt für C++:Wird C++ 14 uneingeschränkte generische Funktionen unterstützen?

G ++ unterstützt unbeschränkte generische Funktionen wie §4.1.2 und §5.1.1 von N3889: Concepts Lite Specification angegeben. Kurz gesagt, Auto kann als Typ-Specifier in einer Parameterdeklaration eines beliebigen Funktionsdeklarators verwendet werden, um eine implizite Funktion Template-Parameter einzuführen, ähnlich wie generische Lambdas.

// the following two function declarations are equivalent 
auto incr(auto x) { return x++; } 
template <typename T> 
auto incr(T x) { return x++; } 

Ich baute GCC 4.9.0 und meine ersten Tests funktionierte wie erwartet. Ich glaube, dass Concepts Lite irgendwie hilfreich für die bevorstehende C++ 14-Spezifikation bleiben wird. Gibt es einen Plan für "unbeschränkte generische Funktionen", um Teil von C++ zu werden?

+2

enthalten ist Während ich dies nicht 100% offiziell werden denken, bis C++ 17 Sie können es fast in C++ 14 tun: 'auto incr = [] (auto x) {return x ++;};' – chris

+0

Prost chris. Ja, ich bin mir dessen bewusst. – user2023370

+0

Ich kann keine der Zusätze finden, die in '4.1.2' und' 5.1.1' von 'N3889' in dem neuesten Entwurfsstandard' N3936' erwähnt werden, also würde ich nein für C++ 14 sagen. –

Antwort

5

Wenn wir uns den neuesten Norm-Entwurf N3936 die mit den C++ 14 DIS ziemlich nahe ist, die N3937 ist (dies in N3938 bedeckt ist). Es enthält keine der in den Abschnitten 4.1.2 und 5.1.1 von N3889 angegebenen Sprache.

Also für C++ 14 sieht es aus wie die Antwort ist nein, aber Bjarne Stroustrup says concepts lite will be a technical report. Sie können mehr über technische Berichte über ISO cpp's Current Status page finden, die sagt:

Jenseits C++ 14, der Ausschuss sieht in etwa 2017. einen anderen C++ Standard-Herstellung Das ist nicht nichts bedeutet ist in der Zwischenzeit passiert, aber , weil wir derzeit acht (8) separate Technische Spezifikationen im Gange haben, von denen einige auf der Spur sind, um in den Jahren 2014 und 2015 veröffentlicht werden. Ab 2012 hat das Komitee Übergang zu einem "entkoppelten" Modell, wo Hauptwerke kann unabhängig von der Standard selbst fortschreiten und als separate TS geliefert werden. Anbieter können wählen, diese zu implementieren, und die Community kann Erfahrungen mit der std :: experimental Version von jeder Funktion sammeln. Auf diese Weise können wir lernen und jedes Feature Design auf Erfahrung anpassen, bevor es offiziell in einer zukünftigen Version der aktuellen C++ Standard-