Esto funciona y es válido el código C++ 11, debido a argumentos de plantilla son sólo el tiempo de compilación:
template <int x>
constexpr int do_something() {
static_assert(x > 0, "x must be > 0");
return x + 5;
}
I enfrentado con los mismos problemas que con expresiones constantes en C++. Hay poca documentación clara sobre constexprs en este momento. Y tenga en cuenta que hay algunos errores conocidos en el rastreador de problemas de gcc, pero su problema no parece ser un error.
Tenga en cuenta que si declara las funciones constexpr dentro de las clases, no podrá usarlas dentro de la clase. Esto también parece no ser un error.
Editar: Esto está permitido de acuerdo a la norma: 7.1.3 estados
... o un compuesto que contiene afirmación de que sólo
- declaraciones nulos,
- static_assert -declarations
- declaraciones de tipodef y declaraciones de alias que no
definen clases o enumeraciones,
- utilizando-declaraciones,
- utilizando Directivas,
- y exactamente un retorno comunicado
fresca, que no sabía '' throw's en una función constexpr' que se llama en un contexto constexpr hará que la compilación falle! – Xeo
@Xeo haciendo * cualquier cosa * no constexpressy en el otro lado de?: Hará el trabajo. :) –
Buen complemento para 'static_assert' Debo decir. :) – Xeo