Вот минимальный пример кода, иллюстрирующий проблему:
#include <iostream>
class Thing
{
// Non-copyable
Thing(const Thing&);
Thing& operator=(const Thing&);
int n_;
public:
Thing(int n) : n_(n) {}
int getValue() const { return n_;}
};
void show(const Thing& t)
{
std::cout << t.getValue() << std::endl;
}
int main()
{
show(3);
}
Это дает ту же ошибку:
int main()
{
show( Thing(3) );
}
Компилятор IBM XL C / C ++ 8.0 под AIX выдает следующие предупреждения:
"testWarning.cpp", line 24.9: 1540-0306 (W) The "private" copy constructor "Thing(const Thing &)" cannot be accessed.
"testWarning.cpp", line 24.9: 1540-0308 (I) The semantics specify that a temporary object must be constructed.
"testWarning.cpp", line 24.9: 1540-0309 (I) The temporary is not constructed, but the copy constructor must be accessible.
Я также пробовал g ++ 4.1.2 с "-Wall" и "-pedantic" и не получил диагностики. Почему здесь требуется доступ к конструктору копирования? Как я могу устранить предупреждение, помимо того, чтобы сделать объект копируемым (что находится вне моего контроля) или сделать явную копию для передачи (когда копирование реального объекта дорого)?