Ce que vous est lié à une directive à l'aide. Une déclaration à l'aide peut être utilisé très bien avec les classes de base templated (ne l'ont pas regardé vers le haut dans la norme, mais juste testé avec un compilateur):
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);
}
Le compilateur trouve correctement le paramètre moins fonction foo
en raison de notre déclaration d'utilisation la re-déclarant dans la portée de c2
, et sort le résultat attendu.
Modifier: mise à jour de la question. Voici la réponse mise à jour:
L'article a raison de dire que vous n'êtes pas autorisé à utiliser un ID de modèle (nom de modèle et arguments). Mais vous pouvez mettre un nom de modèle:
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);
}
Pouvez-vous ajouter un peu plus d'informations à votre question? À votre avis, qu'est-ce qui est illégal? Le lien ne mentionne rien sur les templates – JaredPar
Jared, j'ai corrigé le lien. –
Oui, désolé, j'ai copié le lien de la barre d'adresse et c'était le mauvais. – Sydius