これが私が思いついた状況です:
#include <iostream>
using namespace std;
struct test {
test() { cout << "ctor" << endl; }
test(const test&) = delete;
test(test&&) = delete;
};
auto f() -> test {
return {};
// return test{};
}
auto main() -> int {
f();
}
このコードは clang と gcc の両方でコンパイルされますが、変更return {}
するreturn test{}
とコンパイルされなくなります。何故ですか?どちらの場合も同じように機能するべきではありませんか?率直に言って、これに適したユースケースがあるかどうかはわかりませんが、驚いたので、今は何が起こっているのだろうと思っています.