在[except.ctor]标准( N4140 )保证: 自从try块被input后,为所有构造的自动对象调用析构函数… 但是在下面的例子中,空输出certificate了函数foo的返回值没有被破坏,尽pipe它已经被构造了。 使用g ++(5.2.1)和clang ++(3.6.2-1)和选项-O0 -fno-elide-constructors -std=c++14 。 struct A { ~A() { cout << "~A\n"; } }; struct B { ~B() noexcept(false) { throw 0; } }; A foo() { B b; return {}; } int main() { try { foo(); } catch (…) { } } 这是g ++和clang ++中的一个bug,还是函数返回值不被视为自动对象,还是C ++语言中的循环漏洞? […]