Em um objeto nonconst, por que o C ++ não chama a versão const de um método com sobrecargas public-const e private-nonconst?

class C
{
public:
    void foo() const {}
private:
    void foo() {}
};

int main()
{
    C c;
    c.foo();
}

O MSVC 2013 não gosta disso:

> error C2248: 'C::foo' : cannot access private member declared in class 'C'

Se eu converter para umconst referência, funciona:

const_cast<C const &>(c).foo();

Por que não posso ligar para oconst método no nãoconst objeto?

questionAnswers(2)

yourAnswerToTheQuestion