Au boulot, on est tomb=E9 sur de code comme =E7a :
class A
{
protected:
int f();
};
class B : public A
{
typedef int(A::*fptr)();
fptr p;
int g()
{
//p =3D &A::f;
p =3D &B::f;
}
};
Si on enl=E8ve le commentaire, le code ne compile plus, ce qui semble en
accord avec la norme :
11.5 Protected member access
When a friend or a member function of a derived class references a
protected nonstatic member of a base class, an access check applies
in
addition to those described earlier in this clause.[...] If the
access is to form a pointer to member, the nested-name-specifier
shall
name the derived class (or any class derived from that class).
La question que l'on se pose est la motivation de cette r=E8gle.
Quelqu'un a une id=E9e ?