問題を説明する最小限のコード例を次に示します。
#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) );
}
AIX下のIBMXLC / C ++ 8.0コンパイラーは、以下の警告を出します。
"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.
また、「-Wall」と「-pedantic」を使用してg ++ 4.1.2を試しましたが、診断が得られませんでした。ここでコピーコンストラクタへのアクセスが必要なのはなぜですか?オブジェクトをコピー可能にする(これは私の制御の範囲外です)か、渡すための明示的なコピーを作成する(実際のオブジェクトのコピーに費用がかかる場合)以外に、警告を取り除くにはどうすればよいですか?