При рассмотрении того, что exception_ptr
делает, стандарт C++ 11 говорит (18.8.5/7), что:Может rethrow_exception действительно бросать один и тот же объект исключения, а не копию?
Использование rethrow_exception на exception_ptr объектов, которые относятся к одному объекту исключения не должны вводить гонки данных. [Примечание: если rethrow_exception rethrows один и тот же объект исключения (а не копии), одновременный доступ к этому объекту исключения могут вызваны повторно ввести гонки данных ...
Я не нашел случай, когда это странно «Примечание «применяется, поскольку описанный эффект rethrow_exception
-« Throws: объект исключения, к которому относится p », но 15.1/3, описывающий общие требования к металированию исключения, которые« бросают копию исключения »инициализируют временный объект, называемый объектом исключения. "
Странное примечание подразумевает, что rethrow_exception пропускает эту инициализацию копии. Но действительно ли это возможно?
Может быть, это просто движение? –
Yup, 'std :: rethrow_exception' не могут быть реализованы с использованием выражения' throw x; '. (Но это похоже на 'throw;'.) – aschepler