Compartir a través de


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).

Vea también

Referencia

Cambios importantes en el compilador de Visual C++