Parece que me falta algo más que fundamental. Estoy tratando de usar miembros de la matriz const en tiempo de compilación.Constantes de matriz en tiempo de compilación
const int list[3] = { 2, 5, 7 };
const int a = list[2]; // this doesn't error?
template<int N1, int N2>
struct tmax {
enum { value = ((N1 > N2) ? N1 : N2) };
};
const int b = tmax<2,4>::value;
const int c = tmax<list[0],list[1]>::value; // error is here
int main()
{
return 0;
}
Errores:
prog.cpp:10:24: error: 'list' cannot appear in a constant-expression
prog.cpp:10:30: error: an array reference cannot appear in a constant-expression
Aquí está la relevent IDEOne link
Entonces, ¿por qué no funciona? ¿Qué me estoy perdiendo? ¿Qué debería hacer de manera diferente?
Me imaginé que constexpr sería útil, y ahora que lo veo, veo que tiene una adopción más amplia de lo que pensaba. Dicho esto, un poco más de una explicación de por qué la declaración de const int a funciona pero la lista [1] específicamente no sería apreciada. Gracias. –
OK, por lo que visual studio 2012 no tiene previsto admitir constexpr. Alguien tiene otras soluciones? NO TENGO que usarlo para esto, pero sería bueno. –
@ std''OrgnlDave Agregué más de los diagnósticos del compilador que explica exactamente por qué la lista [1] no es una expresión constante. – bames53