sirve que para ejemplo c++ c++11 language-lawyer extern auto

c++ - para - ¿Se puede volver a declarar una variable como auto que se deduce al mismo tipo?



int c++ range (2)

Editar respuesta: Como se menciona en los comentarios. El problema en este caso es que escribir

external int a; auto a = 3;

es lo mismo que escribir

external int a; int a = 3;

eso significa que tienes una nueva definición de a y eso causa un error.

Primera respuesta: para mi entender, esto rompe partes de la regla de definición única. Específicamente, me refiero a la siguiente regla (en referencia a MISRA C ++ 2008) que dice que un identificador con enlace externo siempre debe tener una sola definición. En su ejemplo, tiene una definición en el archivo actual ( auto a = 3; ) y con una referencia externa también se refiere a una definición en otro archivo.

¿Está permitido por la norma lo siguiente?

#include <iostream> extern int a; auto a = 3; int main(int, char**) { std::cout << a << std::endl; return 0; }

clang acepta el código. g++ queja por declaración conflictiva.


No está muy claro para mí desde el estándar, pero luego está escrito

sección 7.1.6.4 auto especificador
Un programa que usa auto en un contexto no permitido explícitamente en esta sección no está bien formado.

Mejor lea la sección mencionada de la norma para todos los contextos permitidos.

Teniendo en cuenta esto, creo que g ++ es correcto y clang está mal. Pero podría estar equivocado, podría haber una sección separada en el estándar que podría implicar este contexto, pero no pude encontrarlo.