Lo que se ha vinculado a una directiva using. Una declaración using se puede utilizar muy bien con las clases de base con plantilla (no han mirado hacia arriba en la norma, pero sólo probado con un compilador):
template<typename T> struct c1 {
void foo() { std::cout << "empty" << std::endl; }
};
template<typename T> struct c2 : c1<T> {
using c1<T>::foo;
void foo(int) { std::cout << "int" << std::endl; }
};
int main() {
c2<void> c;
c.foo();
c.foo(10);
}
El compilador encuentra correctamente el foo
función sin parámetros debido nuestra declaración de uso vuelve a declararlo en el alcance de c2
y genera el resultado esperado.
Editar: actualizó la pregunta. aquí está la respuesta actualizada:
El artículo tiene razón acerca de que no se le permite usar un ID de plantilla (nombre de plantilla y argumentos). Pero puede poner un nombre de plantilla:
struct c1 {
template<int> void foo() { std::cout << "empty" << std::endl; }
};
struct c2 : c1 {
using c1::foo; // using c1::foo<10> is not valid
void foo(int) { std::cout << "int" << std::endl; }
};
int main() {
c2 c;
c.foo<10>();
c.foo(10);
}
¿Puede añadir un poco más de información a su pregunta? ¿Qué crees que es exactamente ilegal? El enlace no menciona nada sobre las plantillas – JaredPar
Jared, he corregido el enlace. –
Sí, lo siento, copié el enlace de la barra de direcciones y fue el incorrecto. – Sydius