Неоднозначный вызов перегруженной статической функции

Меня смущает эта ситуация, и поиск в Google не дал мне ответа. В основном у меня есть следующий простой код, который не компилируется:

#include <iostream>

class A
{
public:
    int a(int c = 0) { return 1; }
    static int a() { return 2; }
};

int main()
{
    std::cout << A::a() << std::endl;
    return 0;
}

При компиляции этого , GCC 4.2 сообщает, что вызов A :: a () в main () неоднозначен с обеими версиями a () подходящих кандидатов. Компилятор Apple LLVM 3.0 компилируется без ошибок.

Почему gcc не понимает, какую функцию я хочу вызвать? Я думал, что это очевидно, если указать a () с помощью A :: I ' m запрашивает статическую версию функции. Естественно, этот код все равно не компилируется, если я удалю статическую функцию a () , потому что A :: a () не является допустимым синтаксисом для вызова не static a () .

Спасибо за любой комментарий!

12
задан AusCBloke 25 February 2012 в 23:16
поделиться