2012-06-19 13 views

Respuesta

23

De acuerdo con la especificación ISO C++, § 26.2/2:

El efecto de instanciar la plantilla complex para cualquier tipo distinto de float, double o long double está especificado.

En otras palabras, el compilador puede hacer lo que quiera al crear instancia complex<int>. El hecho de que obtienes 0 aquí es un comportamiento perfectamente bien definido desde la perspectiva del lenguaje.

Para una comparación - en ideone's version of gcc, este código ni siquiera se compila. Esa es otra opción perfectamente válida.

Espero que esto ayude!

+0

¿No tengo permitido usar mi propio tipo de número real? Eso es decepcionante. –

+0

@ PaulManta- Sí, supongo que no. No tengo idea de por qué es esto. – templatetypedef

+1

Gracias por su respuesta. Devolver 0, 200 o 42 cuando el comportamiento no está especificado podría estar de acuerdo con un estándar, pero seguramente es un gran escollo para el programador ocasional como yo. – Artium

6

En MinGW 4.6.2 imprime 200.

Sin embargo, en la sección C++ estándar ISO 26.2.2:

El efecto de instanciar la plantilla complex para cualquier tipo distinto de float, double o long double está especificado.

Por lo que su entorno de compilación muestra un comportamiento indefinido para complex<int>, que no está en contra de la norma.

Como templatetypedef señaló, ideone's C99 compiler (GCC 4.3.4) se niega a compilarlo por completo.

+0

Es [4.5.1] (http://ideone.com/pLiug), en realidad. – Puppy

+0

@DeadMG: la versión utilizada en el ejemplo de 'templatetypedef' es 4.3.4, para C99. Su enlace usa C++ 0x, que es la versión 4.5.1, vea [esta página] (http://ideone.com/samples#sample_lang_44) – Unsigned

Cuestiones relacionadas