Dans l'ordre, le compilateur détermine, suivant les règles de visibilité, l'association des noms aux objets, et contrôle qu'il n'y a pas d'ambiguïté ; ce n'est qu'ensuite que le compilateur contrôle les droits d'accès :
class A{ private: int f(); public: void f(); }a;
a.f()
est ambiguë : car il y a deux noms f
dans la même portée,
le fait que seul void f()
soit accessible pour a
n'intervient
pas. Le contrôle d'accès ne peut lever des ambiguïtés liées aux règles de visibilité.