2012-04-10 12 views
9

In this document, el autor dijoPasar el tipo NO-POD a la función Variadica es un comportamiento indefinido?

Sólo un tipo POD puede ser un argumento para los puntos suspensivos "...", mientras que std :: string no es un tipo POD.

Lo entiendo como Passing NON-POD type to Variadic function is undefined behavior. ¿Es correcto?
Sin embargo, ¿está diciendo C/C++ estándar? Intenté encontrarlo en n3242 C++ spec. Pero no puedo encontrar

Me gustaría saber que estoy entendiendo correctamente y este es un estándar.

Respuesta

8

Se especifica en C++ 11 5.2.2/7:

Pasar un argumento evaluado potencialmente de tipo de clase que tiene un constructor de copia no trivial, un contructor movimiento no trivial, o un no -trimial destructor, sin el correspondiente parámetro , se admite de forma condicional con semántica definida por la implementación.

Depende de cada compilador si lo admite o no; el código portable no puede confiar en ningún comportamiento definido de implementación. En estándares más antiguos, simplemente no estaba definido.

+0

Por lo tanto, ** Implementación definida ** * no * ** Indefinida **. –

+7

@Als: es condicionalmente compatible; un compilador puede elegir dejarlo indefinido. Por lo tanto, no está definido si está definido o no. –

+1

Gracias, ¿cómo lo encontraste tan rápido, sin embargo? No puedo encontrar, cada vez que lo intento. ¿Hay algo secreto que tengas? – Benjamin

Cuestiones relacionadas