È valido C99 per quanto posso dire - che sta passando un letterale composto.
serie La C99 ha come esempio (§6.5.2.5/9):
ESEMPIO 1 La definizione nell'ambito di file
int *p = (int []){2, 4};
inizializza p per puntare al primo elemento di una matrice di due interi, il primo con valore due e il secondo quattro. Le espressioni in questo composto letterale devono essere costanti. L'oggetto senza nome ha una durata di archiviazione statica.
Si noti che la cosa (int [])
non è un cast qui.
Questo non è un costrutto C++ valido, i letterali composti non fanno parte dello standard C++ (incluso C++ 11). Alcuni compilatori lo consentono come un'estensione. (GCC fa, passa -Wall -pedantic
per ottenere una diagnostica della medesima. IBM XLC allows it as an extension too.)
Penso che @Nicol Bolas abbia ragione, che ha commentato il tuo post. Non tutto ciò che funziona è valido. Questo è in realtà molto spesso il caso. Direi che lo snippet nel tuo commento risulta in "comportamento indefinito". Quindi se vuoi dimostrargli che è legale, devi cercare/cercare all'interno dello standard c/C++/C++ 11. – poitroae
@ Michael: Non voglio dimostrare che è legale, voglio solo sapere se è legale o no. I commenti al mio post (compresi i miei commenti) sono solo opinioni. – TonyK
Perché è un comportamento indefinito? –