Błąd w przypadku posiadania prywatnego urządzenia kopiującego z publicznym operatorem przypisania

Czy któryś z was może wyjaśnić, dlaczego następujący fragment kodu się nie kompiluje?

#include <iostream>

using namespace std;

class Foo
{
public:
  Foo() { cout << "Foo::Foo()" << endl << endl; }
  Foo& operator=(const Foo&) { cout << "Foo::operator=(const Foo&)" << endl << endl; }
private:
  Foo(const Foo& b) { *this = b; cout << "Foo::Foo(const Foo&)" << endl << endl; }
};

int main()
{
  Foo foo;

  foo = Foo();
}

Błąd, który otrzymuję:

$ g++ -o copy_ctor_assign copy_ctor_assign.cc && ./copy_ctor_assign
copy_ctor_assign.cc: In function 'int main()':
copy_ctor_assign.cc:10: error: 'Foo::Foo(const Foo&)' is private
copy_ctor_assign.cc:17: error: within this context

Uwaga: po usunięciuprywatny: słowo kluczowe kod kompiluje, ale program do kopiowania nigdy nie jest wywoływany. Dlaczego więc popełnia błąd, gdy jest prywatny?

Nie jestem pewien, czy to ważne, ale używam:

$ g++ --version
g++ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-44)
Copyright (C) 2006 Free Software Foundation, Inc.

questionAnswers(6)

yourAnswerToTheQuestion