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í?
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++.