void foo(int)
{
}
class X
{
void foo()
{
}
void bar()
{
foo(42);
// error: no matching function for call to 'X::foo(int)'
// note: candidate is:
// note: void X::foo()
// note: candidate expects 0 arguments, 1 provided
}
};
Почему C++ не может вызвать свободную функцию (которая является единственной с правильной сигнатурой)?Функция функции скрытия свободной функции
В этом случае вы можете использовать ':: foo (42)' для доступа к внешнему foo. [Идеальная демонстрация] (http://ideone.com/6HljO). Но я мало знаю об пространствах имен. –
Я считаю, что это одна ахиллесова пята C++. Он делает изящное использование общих перегруженных свободных имен функций невозможным, например, isempty (вещь), где есть много перегрузок для упущенных данных типов вещей, при этом допускается существование вещи. Isempty(). Глупый, несчастный, неуклюжий. – Mordachai