Salut,
Voil�, je lis actuellement C++ template: The complete guide (tr�s bon livre soit dit en passant) et dans cet ouvrage il est question du probl�me de l'injection des noms lors d'une d�claration d'amiti� dans le namespace qui englobe la classe dans laquelle a lieu cette d�claration. Pour voir si j'ai bien compris le probl�me j'ai donc fait un petit programme qui illustre ce th�me :
Le probl�me c'est qu'avec le compilateur de Visual C++ 2005 j'ai un message � l'�dition de lien qui m'indique que A::print n'est pas d�finie. Ma question est donc : est-ce que je n'ai rien compris ou bien est-ce un "bug" du compilateur de Windows ?
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
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 #include <iostream> #ifdef _WIN32 #define __PRETTY_FUNCTION__ __FUNCTION__ #endif void print(); namespace A { class Test { friend void print(); //Injection de print dans A friend void print2(const Test &); //Injection de print2 dans A }; void callPrint() { print(); //Normalement ici A::print n'est pas visible c'est donc ::print qui est appelée print2(Test()); //Ici A::print2 est visible grâce à l'ADL c'est donc A::print2 qui est appelée et l'édition de lien doit échouer puisque A::print2 n'est pas définie } } void print() { std::cout << __PRETTY_FUNCTION__ << std::endl; } void print2(const A::Test &) { std::cout << __PRETTY_FUNCTION__ << std::endl; } int main(void) { A::callPrint(); return 0; }
D'avance merci pour vos r�ponses
Partager