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.

¿Se puede definir un tipo dentro de una lista de parámetros de plantilla en C++?

En la siguiente definición de la plantilla struct B, se utiliza una lambda como valor predeterminado de un argumento de plantilla no tipo, y en el cuerpo de la lambda se define un tipo A:

template <auto =="" []{="" struct="" a{};="" }="">
struct B {};

Clang y MSVC no tienen problemas con esta definición, pero GCC muestra un error:

error: definición de '<lambda()>::A' dentro de la lista de parámetros de plantilla

Demo: https://gcc.godbolt.org/z/f1dxGbPvs

¿Cuál compilador tiene razón en este caso?</lambda()>

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Según el estándar de C++, GCC es correcto en este caso. La estructura A está definida dentro de una lista de parámetros de plantilla, lo cual no está permitido según el estándar. La expresión lambda utilizada como valor por defecto del argumento de plantilla sin tipo debería contener solo expresiones constantes o direcciones de funciones, pero no definiciones de tipos. Por lo tanto, no se debería confiar en este código y es necesario revisarlo para cumplir con el estándar.

Comments are closed.