¿Por qué un parámetro de plantilla de plantilla no permite 'typename' después de la lista de parámetros?
Cuando usasplantilla plantilla sintaxis como entemplate <template <typename> class T>
, es necesario usar la palabra claveclass
, como usartypename
da un error en la línea de:
error: el parámetro de plantilla de plantilla requiere 'clase' después de la lista de parámetros
En todas partes las palabras clavetypename
yclass
son intercambiable en el caso básico de declarar un parámetro de plantilla.
Podría argumentar que el requisito al usar la plantilla de plantilla es una pista de que se espera que pase untipo de clase, pero este no es siempre el caso (especialmente no después de que C ++ 11 introdujo alias de tipo con plantilla).
template <template <typename> class T> // 'class' keyword required.
struct Foo {
using type = T<int>;
};
template <typename T>
using type = T (*)();
using func_ptr_t = Foo<type>::type;
¿Cuál es el razonamiento detrás de esto?¿Hay alguna razón específica de por qué?typename
esno permitido en plantillas de declaraciones de plantilla?Hace elEstándar C ++ decir algo sobre esto?