2
テスト関数は、コピー/移動コンストラクタ、コピー/移動代入演算子またはコピーエリジョンを使用せずに値を返しています(g ++ 4.8.4では-fno-elide -constructors)コピー/移動またはコピーエリジョンを使用しない値を返す関数
struct Test
{
Test() {}
Test(const Test&) = delete;
Test(Test&&) = delete;
Test& operator = (const Test&) = delete;
Test& operator = (Test&&) = delete;
void fn(){}
};
Test test() {
// error: use of deleted function ‘Test::Test(Test&&)’
// return Test{};
// However, this compiles (g++ 4.8.4 and g++ 6.1.0)
return {};
}
int main() {
test().fn();
// In any case
// error: use of deleted function ‘Test::Test(Test&&)’
// Test t{test()};
}
はコードが有効であり、そうであれば、return {}
の効果は何ですか?
コンストラクタTest(int)でテストを行いました。 –