почему конструктор копирования вызывается при передаче временного объекта по ссылке const?

Я передаю безымянный временный объект функции, определенной параметром const ref. Копирующий ctor класса является частным, и я получаю ошибку компиляции. Я не понимаю, почему в этой ситуации вызывается конструктор копирования.

class A {
public:
  A(int i) {}
private:
  A(const A&) {}
};

void f(const A& a)
{
}

int main()
{
  f(A(1)); // <-- error here: 'A::A(const A&)' is private
}

Как и ожидалось, когда я меняю основной на:

A a(1);
f(a);

, он работает.

РЕДАКТИРОВАТЬ: компилятор - gcc 4.1.2

23
задан Destructor 10 January 2016 в 10:09
поделиться