2012-09-02 13 views
5

¿El estándar C++ 11 especifica que el numeric_limits<T>::min y max tienen que ser expresiones constantes que se pueden usar en plantillas o static_assert?¿Los límites mínimos/mínimos son mínimos?

Más en general, ¿cómo encontrar la lista de las funciones que son expresión constante según el estándar?

+0

La principal motivación detrás de la nueva palabra clave 'constexpr' era hacer las cosas en numeric_limits expresiones constantes. –

Respuesta

9

De hecho, la norma (o mi último borrador de trabajo) enumera todos los miembros de std::numeric_limitsen el capítulo 18.3.2.3 [numeric.limits] como constexpr (no va a hacer ningún bien a citar en realidad esas definiciones aquí), por la versión general de plantilla, así como todas las especializaciones integradas (18.3.2.7 [numeric.special]). Así que sí, se garantiza que serán expresiones constantes (para implementaciones conformes que también admiten realmente constexpr, por supuesto).

En cuanto a su segunda pregunta, más general, no puedo ayudarlo mucho excepto referirlo al estándar C++, cuyo último borrador, que realmente no difiere del estándar real, está disponible de forma gratuita. O puede mirar el cppreference.com más conveniente pero menos vinculante.

+2

Para los afectados, Visual Studio 2013 CTP Noviembre 2013 * no * tiene constexpr numeric_limits, al menos no para min() y max(). –

+0

@EmilyL. Bueno, no tiene 'constexpr' en absoluto, ¿verdad? –

+0

Lo hace, en parte ... todavía no se ha implementado para las funciones de los miembros. http://blogs.msdn.com/cfs-filesystemfile.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-65-69/0638.Updated-Conformance-Map.png –

Cuestiones relacionadas