Bonjour à tous.

J'ai un programme assez complexe, dans lequel j'ai une quinzaine d'occasions de vouloir utiliser exit() après avoir affiché un message.

Voici le code de base pour ce genre de sorties
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
if (!condition) {
	cerr << "erreur grave!" << endl;
	exit(-4);
}
Plutôt que d'avoir quinze fois ce genre de choses, j'essaie d'obtenir: if (!condition) leave(-4) << "erreur grave!" << endl;Pour se faire, un peu naïvement, je raiie cerr en mettant l'appel à exit() dans le destructeur.
Sauf que, ca ne compile pas avec g++ 4.4.5:
Citation Envoyé par g++ -Wall -Wextra -Werror
In function ‘int main()’:
error: no match for ‘operator<<’ in ‘leaver(1) << "salut"’
Voici mon programme de démonstration:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <cstdlib>
class leaver {
private:
	int flag;
public:
	explicit leaver(int i) : flag(i) {}
	~leaver() {::exit(flag);}
};
 
template <typename T>
leaver& operator<<(leaver& leaver, T const& t) {
	std::cerr << t;
	return leaver;
}
 
int main() {
	leaver(1) << "salut"<< std::endl;
	return 0;
}
Quelqu'un a-t-il une suggestion?