es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El compilador no puede ejecutar la expresión constexpr.

Tengo un código algo así:

template<typename ...="" args="">
constexpr sizet getinit_size(Args ... args) {
    return sizeof...(Args);
}

template<typename ...="" args="">
constexpr auto makegenericheader(Args ... args) {
    constexpr sizet headerlenght = getinitsize(args...);
    return header_lenght;
}

constexpr auto createipv4header() {
    constexpr auto x = makegenericheader(0b01, 0b10, 0b01);
    return x;
}

Sé que es un código de prueba, pero lo aislé para encontrar el error.

El compilador me da el error (GCC):

En la instancia de ‘constexpr auto make_generic_header(Args &&…) [con Args = {int, int, int}]’:
/tmp/tmp.CaO5YHcqd8/network.h:39:43: requerido de aquí
/tmp/tmp.CaO5YHcqd8/network.h:31:22: error: ‘args#0’ no es una expresión constante
31 | constexpr size_t header_lenght = get_init_size(args…);
| ^~~~~~~~~~~~~

Intenté agregar el calificador const a los parámetros de la función, pero no funciona. En teoría, toda esta función se puede calcular en tiempo de compilación. Pero donde está el problema, no puedo encontrarlo con mi conocimiento.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el compilador está teniendo problemas con la función get_init_size. El parámetro args no está siendo reconocido como una expresión constante, lo cual es necesario para que la función sea evaluada en tiempo de compilación. Para solucionarlo, puedes agregar el calificador const al parámetro args en la función get_init_size:


    plantilla
    constexpr size_t get_init_size(const Args ... args) {
    return sizeof...(Args);
    }

Comments are closed.