Currently, the construction of the pipeline stages are declared noexcept, in the operators >> and /. This means std::terminate is called if any stage throws during move construction. For some applications, this is undesirable.
The problem currently exists on these classes:
consumer
producer
partial_pipeline
output_with_policy
input_type
Note: pipeline's constructor is not declared noexcept because std::thread may throw std::system_error
TODO
[x] Conditional noexcept in all operators that add a stage to the pipeline
is_nothrow_move_constructible for stored stages, and is_nothrow_constructible for new added stages
[x] assert is_move_constructible for all stages.
[x] Remove noexcept in all operators that create a pipeline
[x] Add noexcept to thread workers and document expected behavior (stages shouldn't throw)
Currently, the construction of the pipeline stages are declared
noexcept
, in the operators>>
and/
. This meansstd::terminate
is called if any stage throws during move construction. For some applications, this is undesirable.The problem currently exists on these classes:
consumer
producer
partial_pipeline
output_with_policy
input_type
Note:
pipeline
's constructor is not declarednoexcept
becausestd::thread
may throwstd::system_error
TODO
noexcept
in all operators that add a stage to the pipelineis_nothrow_move_constructible
for stored stages, andis_nothrow_constructible
for new added stagesis_move_constructible
for all stages.noexcept
in all operators that create a pipelinenoexcept
to thread workers and document expected behavior (stages shouldn't throw)