请考虑以下示例:
class X {
public:
X() = default;
X(const X&) = default;
X(X&&) = delete;
};
X foo() {
X result;
return result;
}
int main() {
foo();
}
Run Code Online (Sandbox Code Playgroud)
Clang和GCC对该计划是否有效表示不同意见.GCC尝试在调用期间初始化临时函数时调用move构造函数,该函数foo()已被删除,从而导致编译错误.Clang处理这个很好,即使有-fno-elide-constructors.
任何人都可以解释为什么GCC被允许在这种情况下调用移动构造函数?不是result左值?