2011-06-30 12 views
5

¿Es posible tener una unión anónima con miembros de const? Tengo el siguiente:Constructor y unión anónima con miembros de const

struct Bar { 
    union { 
    struct { const int x, y; }; 
    const int xy[2]; 
    }; 
    Bar() : x(1), y(2) {} 
}; 

Con G ++ 4.5 me sale el error:

error: uninitialized member ‘Bar::<anonymous union>::xy’ with ‘const’ type ‘const int [2]’ 
+0

'struct {const int x, y; }; 'no es válido C++. ¿Estás preguntando si puedes hacer algo con GCC? –

+0

¿Por qué no es válido? ¿Necesita un constructor con una lista de inicialización? – user2023370

+0

El interruptor de GCC -pedantic parece útil. "ISO C++ prohíbe las estructuras anónimas", dice. Si elimino el 'const's anterior, recibo la misma advertencia. – user2023370

Respuesta

3

Esto fue un problema en GCC que se solucionó en la versión 4.6. Tu código ahora funciona bien.

Todavía depende de una extensión GCC porque utiliza una estructura anónima, pero la mayoría de los compiladores la admiten ahora. Además, el código siguiente construye ahora correctamente con -pedantic:

struct Bar { 
    union { 
    const int x; 
    const int y; 
    }; 
    Bar() : x(1) {} 
}; 

Ese código también es aceptada por Clang y Visual Studio 2010 (pero falla con 2008).

0

Sí. Es posible, pero debes inicializarlo cuando esté construido. No puedes dejarlo sin inicializar. Pero en este caso particular, no creo que sea posible, ya que no puede inicializar una matriz en la lista de inicialización.

Por cierto, echar un vistazo a este interesante tema:

0

Nº Trate de usar el interruptor -pedantic de GCC:

warning: ISO C++ prohibits anonymous structs 

El ejemplo es, por tanto, también ilegal con el const s eliminado.

+0

Me temo que esto no responde la pregunta. Las estructuras anónimas están prohibidas, pero no las uniones anónimas. –

+0

@SamHocevar ¡Gracias! Agradezco su contribución, pero seguramente la respuesta técnicamente sigue siendo no: estaba buscando C++ legal. – user2023370

+0

¿Tal vez podría editar la pregunta, entonces? Establece _ "¿Es posible tener una unión anónima con miembros de la const" _ a la que la respuesta parece ser sí? Parece que tienes un problema diferente con 'struct's anónimos. –

Cuestiones relacionadas