Le Standard de C ++ est un document normatif, qui définit des règles qui resteront (pour la plupart non affectées) dans les futurs documents. Par conséquent, le comité a adopté une approche très prudente concernant ses mises à jour.
Les ajouts à la bibliothèque standard ont été quelque peu faciles. Un certain nombre de bibliothèques étaient à Boost depuis longtemps: il avait été prouvé qu'elles fonctionnaient.
Les ajouts aux concepts de base dans le langage sont cependant beaucoup plus difficiles à expérimenter, car cela nécessite d'abord de modifier un compilateur. Une fonctionnalité C ++ 03 (l'exportation de modèles) avait été spécifiée sans le support du compilateur ... le résultat était horrible. Les implémenteurs du frontend du compilateur EDG l'ont signalé comme une tâche énorme (plusieurs années-homme) pour un gain très faible. Aucun autre compilateur n'a jamais essayé de l'implémenter. Ce n'est pas une situation confortable.
Des fonctionnalités comme constexpr
ou static_assert
étaient faciles (et déjà émulées par les bibliothèques). Les lambdas sont assez bien compris et mis en œuvre dans une variété d'autres langues, il y a déjà eu des recherches approfondies, donc c'était principalement une question de syntaxe.
D'un autre côté, les concepts ont été jugés trop nouveaux et non testés . Ils étaient à peine précisés dans le temps, il n'y avait pas eu de preuve de concept ... et donc ils ont été rejetés, plutôt que de les attendre (ou de se tromper).
Pourquoi ne pas suivre D? Rien ne dit que ce ne sera pas le cas. Le comité a encouragé les gens à repenser à zéro, sans délai urgent, et à essayer de les inclure dans un compilateur pour voir comment ils interagissent avec d'autres fonctionnalités du langage. Il y a notamment la question de la séparation des concepts et des cartes conceptuelles: doivent-ils être regroupés en un ou non?
FYI: Il existe actuellement une branche de Clang dédiée à cette expérimentation, dirigée par Larisse Voufo de l'université de l'Indiana.