在C++标准的§[except.throw]中,规定抛出异常会从throw表达式中复制初始化异常对象。
引用如下: > 抛出异常会复制初始化(11.6, 15.8)一个临时对象,称为异常对象。
那么,为什么以下代码在C++17上可以编译通过呢?
引用如下: > 抛出异常会复制初始化(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中可以编译通过呢?