当捕获的异常是原始类型时,我可以使用std::throw_with_nested
吗?
据说,新类型派生自捕获的异常和新异常。但我不能从像int
这样的原始类型派生出来。因此,我不能使用基本类型的嵌套异常。这是真的吗?
答案 0 :(得分:1)
我的标准副本说:
18.8.6 / 7 引发:如果
U
是不是从nested_exception
派生的非联合类类型,则为未指定的例外从U
和nested_exception
公开派生并由std::forward<T>(t)
构建的类型,否则为std::forward<T>(t)
。
因此throw_with_nested(42)
throw 42;
答案 1 :(得分:1)
标准说明throw_with_nested(T && t)
与U = remove_reference<T>::type
:
抛出:如果
U
是不是从nested_exception
派生的非联合类类型,则是从U
公开派生的未指定类型的例外和nested_exception
并由std::forward<T>(t)
构建,否则为std::forward<T>(t)
。
&#34;否则&#34;条款似乎说如果你没有类型,你只需抛出原始论点。
答案 2 :(得分:1)
抛出的异常是从 new 异常和std::nested_exception
派生的未指定类型(不是新的和捕获的)。然后std::nested_exception
包含std::exception_ptr
到捕获的异常(从std::current_exception
获得)。
所以:
如果新例外是int
,那么您会抛出int
,因为其他答案已经说明了。
如果您捕获 int
,那么您将int
中抛出的std::nested_exception
抛出(从中派生的类型)新异常。