例外 - VC++ 2015 CTP Ultimate中的错误行为

InQ*_*ive 5 c++ exception

我有一个程序:

#include<iostream>
using namespace std;

class Test
{
public:
    void func()
    {
        cout << "Inside func" << endl;
        throw;
    }
};

int myfunc()
{
    Test T;
    T.func();
    return 1;
}

int main()
{
    myfunc();
    cout << "Main func" << endl;//should not print
    getchar();
}
Run Code Online (Sandbox Code Playgroud)

我的期望是这个程序将终止main,但在VC++ 2015上,main cout它正在打印.这违背了我的理解,所以我编译了它gcc它在那里工作正常.

这是VC++ 2015中的错误还是程序终止的行为,这是未指定的/ UB行为?它应该执行cout << "Main func" << endl;吗?

IDE:VS2015 CTP Ultimate预览版(30天)

标志: /GS /analyze- /W3 /Zc:wchar_t /ZI /Gm /Od /sdl /Fd"Debug\vc140.pdb" /fp:precise /D "_MBCS" /errorReport:prompt /WX- /Zc:forScope /RTC1 /Gd /Oy- /MDd /Fa"Debug\" /EHsc /nologo /Fo"Debug\" /Fp"Debug\exception.pch"

Ale*_*exD 5

throw没有参数,当在不正确的上下文中调用时,应该调用terminate.

根据标准:

一个抛出表达式,没有操作重新抛出当前处理的例外

....

如果当前没有处理异常,则执行不带操作数调用的throw-expressionstd::terminate()

然后行为取决于当前安装std::terminate_handler,但无论如何执行应该终止.

必需的行为:A terminate_handler应终止程序的执行而不返回调用者.

默认行为:实现的默认terminate_handler调用abort.默认实现调用std::abort.