當我捕獲的異常是原始類型時,可以使用std::throw_with_nested
嗎?嵌套異常和原始類型
據說,新類型是從捕獲的異常和新的異常派生而來的。但是我不能從像int
這樣的原始類型中派生出來。因此我不能使用基元類型的嵌套異常。真的嗎?
當我捕獲的異常是原始類型時,可以使用std::throw_with_nested
嗎?嵌套異常和原始類型
據說,新類型是從捕獲的異常和新的異常派生而來的。但是我不能從像int
這樣的原始類型中派生出來。因此我不能使用基元類型的嵌套異常。真的嗎?
我的標準的副本這樣說:
18.8.6/7拋出:如果
U
不是來自nested_exception
,未指定類型的異常是派生的非工會類類型公開地從U
和nested_exception
公開得到並且從std::forward<T>(t)
構造,否則std::forward<T>(t)
。
所以throw_with_nested(42)
應該throw 42;
標準說,大約throw_with_nested(T && t)
,與U = remove_reference<T>::type
:
拋出:如果
U
不是來自nested_exception
衍生的非工會類類型的異常未指定的類型,公開地從U
和nested_exception
公開得出並且從std::forward<T>(t)
構建,其他rwisestd::forward<T>(t)
。
的「否則」條款似乎是說,如果你沒有一個類類型,你只是把原來的說法。
拋出的異常是從新的異常和std::nested_exception
(不是新的和捕獲的)派生的未指定類型。 std::nested_exception
然後包含std::exception_ptr
捕獲的異常(從std::current_exception
獲得)。
所以:
如果新異常是int
然後你把其他的答案已經指出的int
。
如果捕捉的int
然後你扔(源自一型)在std::nested_exception
拋出int
新的異常。