Bonjour,

Voici un morceau de code qui compilait bien avec gcc c++ 4.0.1 et qui ne
compile pas avec la version 4.3.0. Il y a plusieurs fichiers.
Le message d'erreur que je reçois quand je compile avec c++ 4.3.0 est:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
obj.cpp:3: erreur: specialization of 'impl<T>::impl() [with T = objimpl]' after instantiation
obj.cpp:4: erreur: specialization of 'impl<T>::~impl() [with T = objimpl]' after instantiation
Si quelqu'un pouvait m'expliquer pourquoi parce que je ne comprends pas ...
Merci
Michel

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
// impl.h
template <class T> struct impl
{
	T* pimpl;
	impl();
	~impl();
};
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
// objimpl.h
#include <iostream>
class objimpl 
{ 
	public: 
	objimpl(){};
	void print(int n){std::cout<<"n: "<<n<<"\n";}
};
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
// obj.h
#include "impl.h"
class objimpl;
class obj : private impl<objimpl> 
{ public: 
	int _n;
	obj(int n):_n(n){};
	void print();
};
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
// obj.cpp
#include "objimpl.h"
#include "obj.h"
template <> impl<objimpl>::impl() : pimpl(new objimpl()) {};
template <> impl<objimpl>::~impl() {delete pimpl;}
void obj::print(){pimpl->print(_n);}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
// main.cpp
#include "obj.h"
int main()
{
	obj obj_test(1);
	obj_test.print();	
}