Badając co exception_ptr
robi, standard C++ 11 mówi (18.8.5/7), że:czy rethrow_exception naprawdę może wyrzucić ten sam wyjątek, a nie kopię?
Zastosowanie rethrow_exception na exception_ptr obiektów, które odnoszą się do tego samego obiektu wyjątku nie wprowadzają wyścig danych. [Uwaga: jeśli rethrow_exception ponownie generuje ten sam obiekt wyjątku (zamiast kopii), jednoczesny dostęp do tego obiektu wyjątku rethrown może wprowadzić wyścigu danych ...
nie znajdę przypadek, w którym to dziwne „Uwaga "dotyczy, ponieważ opisany efekt rethrow_exception
to" Zgłasza: obiekt wyjątku, do którego odnosi się p ", ale 15.1/3, opisujący ogólny proces generowania wyjątków, który" rzuca wyjątek - inicjuje obiekt tymczasowy, zwany obiektem wyjątku. "
Dziwna notatka oznaczałaby, że rethrow_exception pomija tę inicjalizację kopii. Ale czy to naprawdę możliwe?
Może to po prostu w ruchu? –
Yup, 'std :: rethrow_exception' nie może zostać zaimplementowane za pomocą wyrażenia' throw x; '. (Ale to jest podobne do 'throw;'.) – aschepler