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.

Instantiación explícita de una plantilla de función eliminada en C++

Si una plantilla de función está marcada como eliminada, ¿se permite instanciarla explícitamente como en el ejemplo:

template<class t="">
int foo(T) = delete;

El siguiente código:

template int foo(int);

Clang y GCC lo permiten, mientras que MSVC muestra el siguiente error:

error C2280: 'int foo<int>(int)': intento de hacer referencia a una función eliminada

Demo: https://gcc.godbolt.org/z/49hfqnr4f

¿Qué compilador tiene la razón aquí?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    No se permite instanciar explícitamente una plantilla de función que se haya marcado como eliminada. Por lo tanto, MSVC es correcto al imprimir un error en este caso. Permitir la instanciación explícita de una plantilla de función eliminada en Clang y GCC no está de acuerdo con el estándar de C++.

Comments are closed.