Resumen de cambios importantes en tiempo de compilación
Actualización: noviembre 2007
En este tema se resumen los errores en tiempo de compilación y las advertencias que se emitirán ahora para el código que compilaba sin errores o advertencias antes de Visual C++ 2003. Sin embargo, algunos cambios importantes de tiempo de compilación relacionados con conformidad ya fueron introducidos en Visual C++ 2005.
Ahora se requieren paréntesis de cierre para la directiva de preprocesador definida (C2004).
Falta la palabra clave typename y las especializaciones explícitas ya no encuentran parámetros de plantilla en la plantilla principal (C2146 ).
Sólo se puede tener acceso a un miembro protegido (n) mediante una función miembro de una clase (B) que hereda de la clase (A) de la que (n) es miembro (C2247).
Las comprobaciones de accesibilidad mejoradas en el compilador detectan ahora las clases base inaccesibles (C2247).
Una especialización explícita no puede ser un constructor de copia ni un operador de asignación de copia (C2299).
No se puede detectar una excepción si no se puede obtener acceso al destructor o al constructor de copias (C2316).
No se permiten argumentos predeterminados en punteros a funciones (C2383).
No se puede inicializar un miembro de datos estático mediante una clase derivada (C2477).
El estándar no permite la inicialización de un tipo typedef; ahora se genera un error de compilación (C2513).
bool es ahora un tipo apropiado (C2632).
Una conversión definida por el usuario (UDC) puede crear ahora ambigüedad con operadores sobrecargados (C2666).
Una conversión de cualificación no es la misma que la conversión de identidad (C2666).
Más expresiones se consideran ahora constantes de puntero nulo válidas (C2668).
template<> se requiere ahora en lugares donde el compilador lo deduciría previamente (C2768).
La especialización explícita de una función miembro fuera de la clase no es válida si la función ya se ha especializado explícitamente mediante una especialización de clase de plantilla. (C2910).
Para cada especialización explícita, debe elegir los parámetros de modo que coincidan con los parámetros de la plantilla principal (C2912).
No se permiten ya parámetros de plantilla sin tipo de punto flotante (C2993).
No se permite el uso de plantillas de clase como argumento de tipo de plantilla (C3206).
Los nombres de funciones friend ya no se introducen en el espacio de nombres contenedor (C3767).
Conformidad puntero a miembro mejorada (C3867).
El compilador ya no aceptará comas adicionales en una macro (C4002).
Un objeto de tipo POD construido con un inicializador del formulario () será inicializado de forma predeterminada (C4345).
typename es necesaria si se va a tratar un nombre dependiente como un tipo (C4346).
Las funciones consideradas incorrectamente como especializaciones de plantillas ya no se consideran así (C4347).
No se pueden inicializar miembros de datos estáticos mediante una clase derivada (C4356).
Una especialización de plantilla de clase debe definirse antes de su utilización en un tipo de valor devuelto (C4686).
El compilador informa ahora de código inaccesible (C4702).
Se debe definir una declaración friend que declara una nueva función que no es de plantilla (LNK2019).