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 :
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;
}
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 ?

D'avance merci pour vos r�ponses