Prenons l'exemple suivant:g ++ - 6 erreurs sur les paramètres du modèle ombrées en g ++ - 5 ne pas
#include <vector>
template <typename T, template <class T> class Container>
std::vector<T> To_Vector(Container<T> const& c){
return std::vector<T>(c.begin(), c.end());
}
int main(){}
Avec g++-5
, il compile sans erreur:
Avec g++-6
est ne réussit pas à compiler :
g++-6 -o main main.cpp
main.cpp:4:33: error: declaration of template parameter ‘T’ shadows template parameter
template <typename T, template <class T> class Container>
^~~~~
main.cpp:4:11: note: template parameter ‘T’ declared here
template <typename T, template <class T> class Container>
Le compilateur est-il incorrect? Mon code est-il faux?
Pourquoi g++-5
compile ce code alors que g++-6
ne le fait pas?
g++-5 --version
g++-5 (Ubuntu 5.4.1-2ubuntu1~14.04) 5.4.1 20160904
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
g++-6 --version
g++-6 (Ubuntu 6.2.0-3ubuntu11~14.04) 6.2.0 20160901
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
@skypjack Ok, donc je devrais omettre le 'T' dans, parce que juste construit pour moi. –
C'est une solution valide et fonctionnelle. Ce 'T 'est inutile dans votre exemple, n'est-ce pas? – skypjack
@skypjack Vous avez raison. J'ai dû être confus en pensant que le nom du type de conteneur devait être spécialisé sur le type T, mais cela se produit sur les paramètres réels. –