De acuerdo con la especificación ISO C++, § 26.2/2:¿Por qué C++ ordena que ese complejo solo se instancia para doble flotante, doble o larga?
El efecto de instanciar la plantilla
complex
para cualquier tipo distinto defloat
,double
olong double
está especificado.
¿Por qué los autores estándar agregarían explícitamente esta restricción? Esto lo hace no especificado, por ejemplo, lo que sucede si hace complex<int>
o complex<MyCustomFixedPointType>
y parece una restricción artificial.
¿Hay algún motivo para esta limitación? ¿Existe una solución si desea crear una instancia de complex
con su propio tipo personalizado?
Principalmente estoy haciendo esta pregunta debido a this earlier question, en la cual el OP estaba confundido sobre por qué abs
daba salidas extrañas para . Dicho esto, esto todavía no tiene sentido dado que también podríamos querer hacer complex
números fuera de los tipos de puntos fijos, números reales de mayor precisión, etc.
Tuve que reír después de ver su respuesta anterior, pero realmente es una buena pregunta. – chris
@ chris- Me sentí mal al dar esa respuesta sin poder darle una razón de alto nivel. Normalmente soy bueno diciendo "este es un caso extremo extraño de C++ por razones X, Y y Z", pero esta vez no tengo idea de qué pasa. – templatetypedef
"La estandarización del complejo se ha discutido en el comité de forma intermitente durante más de una década y existe una resistencia significativa por parte de al menos un proveedor para apoyarlo". http://lists.cs.uiuc.edu/pipermail/cfe-dev/2012-March/020398.html –