Es válido C99 por lo que puedo decir, eso es pasar un compuesto literal.
estándar El C99 tiene esto como un ejemplo (§6.5.2.5/9):
Ejemplo 1 La definición ámbito de archivo
int *p = (int []){2, 4};
inicializa p para apuntar a la primer elemento de una matriz de dos ints, el primero tiene el valor dos y el segundo, cuatro. Se requiere que las expresiones en este literal compuesto sean constantes. El objeto sin nombre tiene una duración de almacenamiento estática.
Tenga en cuenta que la cosa (int [])
no está aquí.
Esto no es una construcción C++ válida, sin embargo, los literales compuestos no son parte del estándar C++ (C++ 11 incluido). Algunos compiladores lo permiten como una extensión. (GCC, pasan -Wall -pedantic
para obtener un diagnóstico al respecto. IBM xlC allows it as an extension too.)
Creo que @Nicol Bolas tiene razón, que comentó sobre su publicación. No todo lo que funciona, es válido. Eso es en realidad realmente el caso. Diría que el fragmento de tu comentario da como resultado un "comportamiento indefinido". Entonces, si quiere demostrarle que es legal, debe buscar/buscar dentro del estándar c/C++/C++ 11. – poitroae
@Michael: No quiero probar que es legal, solo quiero saber si es legal o no. Los comentarios a mi publicación (incluidos mis comentarios) son solo opiniones. – TonyK
¿Por qué es un comportamiento indefinido? –