在§[except.throw]
中,标准说抛出异常从 throw 表达式复制初始化异常对象
抛出异常复制初始化(11.6,15.8)一个临时对象,称为异常对象
那么为什么下面的代码会在 C++17 上编译呢?
class Exception {
public:
Exception() = default;
Exception(Exception&&) = delete;
Exception(const Exception&) = delete;
};
int main() {
throw Exception{};
return 0;
}
(https://wandbox.org/permlink/R3WfzfnBAORTLVSy)
复制初始化不包括任何符合prvalue省略的情况(从我看来)。那么为什么上面的代码在 C++17 中编译呢?