Bonjour,

Soit le code suivant :

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
 
template<typename T>
class A {
public:
    int s() { return 1; };
};
 
template<typename T1, typename T2>
class B : public A<T1>
{
protected:
    T2 a;
public:
    int f() { 
      return s();  // NOK
      // return this->s();  //OK
      // return A<T1>::s(); // OK aussi
    }
};
 
int main()  {
  B<int, double> b;
  b.f();
  return 0;
}
Qu’est-ce qui justifie que « return s(); » ne compile pas ? (sachant que gcc comme clang me le refusent en tant que « non déclaré », ils ont probablement une bonne raison de le considérer).