2014-06-15 1 views
16

Tout en regardant les changements de version GCC 4.9.0 here, j'ai été agréablement surpris de lire ce qui suit; dans la section « nouvelles langues et des améliorations linguistiques spécifiques » C++:C++ 14 prendra-t-il en charge des fonctions génériques non contraintes?

G ++ prend en charge les fonctions génériques sans contrainte tel que spécifié par §4.1.2 et §5.1.1 de N3889: Concepts Lite Specification. Brièvement, auto peut être utilisé comme spécificateur de type dans une déclaration de paramètre de tout déclarateur de fonction afin d'introduire un paramètre de modèle de fonction implicite , semblable aux lambdas génériques.

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

J'ai construit GCC 4.9.0 et mes premiers tests a fonctionné comme prévu. Je crois que Concepts Lite restera en quelque sorte auxiliaire à la prochaine spécification C++ 14. Existe-t-il un plan pour que les «fonctions génériques non contraintes» deviennent une partie de C++?

+2

Bien que je ne pense pas que cela deviendra 100% officiel jusqu'au 17 C++ , vous pouvez presque le faire en C++ 14: 'auto incr = [] (auto x) {return x ++;};' – chris

+0

Bravo chris. Oui, je suis au courant de celui-là. – user2023370

+0

Je ne trouve aucun des ajouts mentionnés dans '4.1.2' et' 5.1.1' de 'N3889' dans le dernier projet de norme' N3936', donc je dirais non pour C++ 14. –

Répondre

5

Si nous regardons le dernier projet de norme N3936 qui est assez proche du 14 C++ DIS qui est N3937 (cela est couvert dans N3938). Il ne contient aucune des langues spécifiées dans les sections 4.1.2 et 5.1.1 de N3889. Donc, pour C++ 14, la réponse est non, mais Bjarne Stroustrup says concepts lite will be a technical report. Vous pouvez trouver plus sur les rapports techniques sur ISO cpp's Current Status page qui dit:

Au-delà de C++ 14, le comité envisage de produire un autre C++ standard dans environ 2017. Cela ne signifie pas rien qui se passe dans l'intervalle, cependant , parce que nous avons actuellement huit (8) spécifications techniques distinctes en cours, dont plusieurs devraient être publiées en 2014 et en 2015 à . À partir de 2012, le comité a fait la transition vers un modèle «découplé» où les principaux travaux peut progresser indépendamment de la norme elle-même et être livrée sous la forme TS séparés. Les fournisseurs peuvent choisir de les implémenter, et la communauté peut acquérir de l'expérience avec la version std :: experimental de chaque fonctionnalité. Cela nous permet d'apprendre et de régler chaque conception de fonction basée sur l'expérience avant qu'elle ne soit officiellement inclus dans une future version de la réelle C++ standard

Questions connexes