Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

template et class par defaut dans l'argumentation d'un template.

2 réponses
Avatar
Stephane Wirtel
Je viens de regarder un exemple de code dans un livre expliquant le
fonctionnement de chaque classe de la STL, et j'ai voulu tester la
possibilité de déclarer par défaut une classe lors de la déclaration de la
template.

Est-ce que cela pourrait fonctionner avec un autre compilateur, ou est-ce
une faute de ma part au niveau de la déclaration du template ?



Voici le code :

bash-2.05b$ cat template.cc
#include <iostream>
#include <iomanip>
#include <string>
#include <vector>

using namespace std;

template <class A, class container=vector<A> > class test
{
public:
test() {
cout << "A : " << typeid(A).name << endl;
cout << "container : " << typeid (container).name << endl;
}
};

int main (int argc, char **argv)
{
return 0;
}
bash-2.05b$

Voici l'erreur de compilation

bash-2.05b$ g++ template.cc -o template
template.cc: In constructor `test<A, container>::test()':
template.cc:12: internal compiler error: in resolve_overloaded_unification, at cc1plus/../../../../contrib/gcc/cp/pt.c:9235
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.
bash-2.05b$


Stéphane

2 réponses

Avatar
Fabien LE LEZ
Quelle version de gcc utilises-tu ?


--
;-)
Avatar
Gabriel Dos Reis
Stephane Wirtel writes:

| Je viens de regarder un exemple de code dans un livre expliquant le
| fonctionnement de chaque classe de la STL, et j'ai voulu tester la
| possibilité de déclarer par défaut une classe lors de la déclaration de la
| template.
|
| Est-ce que cela pourrait fonctionner avec un autre compilateur, ou est-ce
| une faute de ma part au niveau de la déclaration du template ?
|
|
|
| Voici le code :
|
| bash-2.05b$ cat template.cc
| #include <iostream>
| #include <iomanip>
| #include <string>
| #include <vector>
|
| using namespace std;
|
| template <class A, class container=vector<A> > class test
| {
| public:
| test() {
| cout << "A : " << typeid(A).name << endl;
| cout << "container : " << typeid (container).name << endl;
^

Tu as oublié de placer « () » pour appeler la fonction name.


| }
| };
|
| int main (int argc, char **argv)
| {
| return 0;
| }
| bash-2.05b$
|
| Voici l'erreur de compilation
|
| bash-2.05b$ g++ template.cc -o template
| template.cc: In constructor `test<A, container>::test()':
| template.cc:12: internal compiler error: in resolve_overloaded_unification, at cc1plus/../../../../contrib/gcc/cp/pt.c:9235
| Please submit a full bug report,
| with preprocessed source if appropriate.
| See <URL:http://gcc.gnu.org/bugs.html> for instructions.
| bash-2.05b$
|
|
| Stéphane

--
Gabriel Dos Reis

Texas A&M University -- Department of Computer Science
301, Bright Building -- College Station, TX 77843-3112