El estándar de C ++ es un documento normativo, que establece reglas que permanecerán (en su mayoría no afectadas) en los documentos futuros. Por lo tanto, el comité ha adoptado un enfoque muy cauteloso con respecto a sus actualizaciones.
Las adiciones a la biblioteca estándar fueron algo fáciles. Varias bibliotecas habían estado en Boost durante mucho tiempo: se había demostrado que funcionaban.
Sin embargo, las adiciones a los conceptos centrales en el lenguaje son mucho más difíciles de experimentar, ya que primero requiere modificar un compilador. Se había especificado una característica de C ++ 03 (la exportación de plantillas) sin el soporte del compilador ... el resultado fue horrible. Los implementadores de la interfaz del compilador EDG lo informaron como una tarea masiva (varios años hombre) con muy poca ganancia. Ningún otro compilador ha intentado implementarlo. No es una situación cómoda.
Características como constexpr
o static_assert
eran fáciles (y ya emuladas por bibliotecas). Las lambdas se entienden bastante bien y se implementan en una variedad de otros idiomas, ya se ha realizado una investigación exhaustiva, por lo que fue principalmente una cuestión de sintaxis.
Por otro lado, los conceptos se consideraron demasiado nuevos y no se probaron . Apenas se especificaron a tiempo, no hubo prueba de concepto ... y, por lo tanto, fueron rechazados, en lugar de esperarlos (o cometer un error).
¿Por qué no seguir a D? No se dice que no lo hará. El comité ha alentado a las personas a repensar desde cero, sin límite de tiempo, e intentar incluirlos en un compilador para ver cómo interactúan con otras características del lenguaje. Cabe destacar la cuestión de separar los conceptos y los mapas conceptuales: ¿deberían agruparse como uno o no?
FYI: Actualmente hay una rama de Clang dedicada a esta experimentación, dirigida por Larisse Voufo de la universidad de Indiana.