C++11 で使用される型の要件についてはまだ混乱していますstd::vector
が、これはバグのあるコンパイラ (gcc 4.7.0) が原因である可能性があります。このコード:
struct A {
A() : X(0) { std::cerr<<" A::A(); this="<<this<<'\n'; }
int X;
};
int main()
{
std::vector<A> a;
a.resize(4);
}
正常に動作し、期待される出力を生成します。これは、(明示的に指定された) デフォルトの ctor が呼び出されたことを示します (暗黙のコピー ctor ではありません)。ただし、削除されたコピー ctor をクラスに追加すると、viz
struct A {
A() : X(0) { std::cerr<<" A::A(); this="<<this<<'\n'; }
A(A const&) = delete;
int X;
};
gcc 4.7.0 はコンパイルされませんが、削除された ctor を使用しようとします。それは正しい動作ですか、それともバグですか?前者の場合、コードを機能させる方法は?