2014-02-25 121 views
1

當我捕獲的異常是原始類型時,可以使用std::throw_with_nested嗎?嵌套異常和原始類型

據說,新類型是從捕獲的異常和新的異常派生而來的。但是我不能從像int這樣的原始類型中派生出來。因此我不能使用基元類型的嵌套異常。真的嗎?

回答

1

我的標準的副本這樣說:

18.8.6/7拋出:如果U不是來自nested_exception,未指定類型的異常是派生的非工會類類型公開地從Unested_exception公開得到並且從std::forward<T>(t)構造,否則std::forward<T>(t)

所以throw_with_nested(42)應該throw 42;

1

標準說,大約throw_with_nested(T && t),與U = remove_reference<T>::type

拋出:如果U不是來自nested_exception衍生的非工會類類型的異常未指定的類型,公開地從Unested_exception公開得出並且從std::forward<T>(t)構建,其他rwise std::forward<T>(t)

的「否則」條款似乎是說,如果你沒有一個類類型,你只是把原來的說法。

1

拋出的異常是從新的異常和std::nested_exception(不是新的和捕獲的)派生的未指定類型。 std::nested_exception然後包含std::exception_ptr捕獲的異常(從std::current_exception獲得)。

所以:

如果異常是int然後你把其他的答案已經指出的int

如果捕捉int然後你扔(源自一型)在std::nested_exception拋出int新的異常。

相關問題