Минимальный пример:Функция с ++ друга скрыта функцией класса?
class A
{
friend void swap(A& first, A& second) {}
void swap(A& other) {}
void call_swap(A& other)
{
swap(*this, other);
}
};
int main() { return 0; }
г ++ 4,7 говорит:
friend.cpp: In member function ‘void A::call_swap(A&)’:
friend.cpp:7:20: error: no matching function for call to ‘A::swap(A&, A&)’
friend.cpp:7:20: note: candidate is:
friend.cpp:4:7: note: void A::swap(A&)
friend.cpp:4:7: note: candidate expects 1 argument, 2 provided
Outcomment линия 4:
// void swap(A& other) {}
... и она отлично работает. Почему и как это исправить, если я хочу сохранить оба варианта моей функции свопинга?
Это похоже на ошибку компилятора? – McKay
@McKay: бывает. Тем не менее, clang дает мне ту же ошибку (с различным объяснением). – Johannes
Как определить функцию вне класса в глобальном пространстве имен? –