C++11

El tipo del valor retornado de una función que retorna un std::vector temporal no necesita ser cambiado explícitamente al std::vector && para invocar al move constructor, pues los temporales son considerados automáticamente como rvalues.

En el C++03, una clase o struct debe seguir un número de reglas para que sea considerado un tipo plain old data (POD).

Una clase o struct trivial se define como uno los siguientes: Una clase o struct es standard-layout, por definición, con tal que cumpla lo siguiente: En el C++03, el compilador debe instanciar una plantilla siempre que una plantilla especificada completamente es encontrada en una unidad de traducción.

Sin embargo C++03 solo permite inicializar listas en los structs y las clases que se ajustan a la definición Plain Old Data (POD); C++11 extiende la inicialización de listas, así que pueden ser usadas para todas las clases incluyendo los contenedores estándar como el std::vector.

Esto permite que los constructores y otras funciones tomen inicializadores de lista como parámetros.

Hay varias maneras de inicializar tipos, y no todas producen los mismos resultados cuando son intercambiadas.

A medida que C++ evolucionó desde el C, mantuvo la sintaxis básica extendiéndola en caso necesario.

Ejemplos de otros lenguajes similares a C++ que proporcionen la delegación son Java, C#, y D. Esta sintaxis es como sigue: Note que, en este caso, el mismo efecto habría podido ser alcanzado haciendo new_number un parámetro por defecto.

C++ no adoptó el mismo comportamiento, permitiendo a 0 solamente como constante del puntero nulo.

C++11 corrige esto introduciendo una nueva palabra clave para servir como constante inconfundible de puntero nulo: nullptr.

Por lo tanto, no pueden ser comparados con números enteros (la expresión Enumeracion::Valor4 == 101 da un error del compilador).

Sin embargo, contextos del lenguaje que específicamente requieren valor boleano, (las condiciones de sentencias if y en bucles, tan bien como operandos en operadores lógicos), como en conversiones explícitas y por lo tanto pueden usar a un operador de conversión bool.

[2]​ Éste es un simple ejemplo de una unión permitida en C++: Los cambios no romperán ningún código existente puesto que solamente se relajan las reglas actuales.

Estas características permiten al lenguaje hacer cosas que eran previamente imposibles, excesivamente verbosas, o requerían bibliotecas no portables.

La segunda clase, definida como L"", produce un arreglo terminado en null de tipo const wchar_t, donde wchar_t es un carácter ancho.

C++11 proporcionará un literal de cadena raw: En el primer caso, todo entre "( y )" es parte del string.

A esta función se le pasa "1234" como un string de estilo C, así que tiene un terminador null.

Como no se requiere un mensaje de diagnóstico,[4]​ esto da lugar típicamente a un error del enlazador (linker).

Por ejemplo, el tipo siguiente es no copiable: El especificador = delete puede ser usado para prohibir llamar cualquier función, lo cual puede ser usado para rechazar la llamada de una función de miembro con parámetros particulares.

[5]​[6]​ C++03 proporciona dos métodos para probar aserciones: el macro assert y la directiva de preprocesador #error.

Pero no puede ser usado para hacer lo siguiente: Esto permite en C++11 retornar el tamaño de OtherType.

La implementación define si los objetos dinámicamente asignados que se vuelvan inalcanzables son reclamados automáticamente.

Están disponibles actualmente varias implementaciones completas y parciales del TR1 usando el namespace std::tr1.

También, pueden ser mejoradas con las características que eran posibles debajo el C++03, pero no eran parte de la especificación original del TR1.

Las propuestas de biblioteca que no estén listas para C++11 serán puestas en el TR2 u otros reportes técnicos.

Estas incluyen, pero no se limitan necesariamente a: Adicionalmente, ha pasado mucho tiempo desde que C++ fue estandardizado.

Para correr el nuevo hilo, esta clase tomará un objeto función y opcionalmente una serie de argumentos.

La biblioteca de hilo del C++11 también incluirá futuros y promesas para pasar resultados asincrónicos entre los hilos, y el std::packaged_task para envolver (wrapping) una llamada de función que puede generar tal resultado asincrónico.

Las referencias wrapper son útiles sobre todo para las plantillas de función, donde son necesarias las referencias a los parámetros en vez de a las copias: Esta nueva utilidad será agregada al encabezado existente y no necesita otras extensiones del lenguaje C++.

El compilador puede generar advertencias acerca de la conversión desde int a double y viceversa.