Me gustaría definir dentro de una clase una constante cuyo valor es el máximo posible int. Algo como esto:Usando numeric_limits :: max() en las expresiones constantes
class A
{
...
static const int ERROR_VALUE = std::numeric_limits<int>::max();
...
}
Esta declaración falla al compilar con el siguiente mensaje:
numeric.cpp:8: error: 'std::numeric_limits::max()' cannot appear in a constant-expression numeric.cpp:8: error: a function call cannot appear in a constant-expression
entiendo por qué esto no funciona, pero hay dos cosas parecer extraño para mí:
Me parece una decisión natural utilizar el valor en expresiones constantes. ¿Por qué los diseñadores de idiomas decidieron hacer max() una función que no permite este uso?
Las reclamaciones de especificaciones en 18.2.1 que
For all members declared static const in the numeric_limits template, specializations shall define these values in such a way that they are usable as integral constant expressions.
no ¿Quiere decir que yo debería ser capaz de utilizarlo en mi escenario y no se contradice el mensaje de error?
Gracias.
puede utilizar climits http://www.cplusplus.com/reference/clibrary/climits/ – Anycorn
@aaa: Pero 'climits' no funcionará bien con plantillas. – UncleBens
@Uncle por desgracia. en principio puede ajustar define en plantillas, algo de trabajo pero factible. o boost integer_traits Creo que ya los proporciona: 'integer_traits <> :: const_max/const_min' – Anycorn