2012-04-10 5 views
9

In this document, l'autore ha dettoIl passaggio del tipo NON POD alla funzione Variadic è un comportamento indefinito?

Solo un POD-tipo può essere un argomento per i puntini di sospensione "...", mentre std :: string non è un POD-type.

Sto capendo questo come Passing NON-POD type to Variadic function is undefined behavior. È giusto?
Tuttavia, sta dicendo standard C/C++? Ho provato a trovarlo in spec. C++ n3242. Ma non riesco a trovare.

Mi piacerebbe sapere che sto capendo bene e questo è uno standard.

risposta

8

Si precisa in C++ 11 5.2.2/7:

Passando un argomento potenzialmente valutata di tipo classe avente un costruttore di copia non banale, una mossa contructor non banale, o un non -trivial destructor, con nessun parametro corrispondente, è condizionalmente supportato con semantica definita dall'implementazione.

Quindi spetta a ciascun compilatore se supportarlo o meno; il codice portatile non può fare affidamento su alcun comportamento definito dall'implementazione. Negli standard più vecchi, era semplicemente indefinito.

+0

Quindi è ** Implementazione definita ** * non * ** Non definito **. –

+7

@Als: è supportato in modo condizionale; un compilatore può scegliere di lasciarlo indefinito. Quindi non è definito se è definito o meno. –

+1

Grazie, come l'hai trovato così veloce, però? Non riesco a trovare, ogni volta che ho provato. C'è qualcosa di segreto che hai? – Benjamin