cuda::experimental::stf::exception_policies::operator|#

Overloads#

operator|(__l, __r)#

template<class _L, class _R, ::cuda::std::enable_if_t<detail::__is_exception_sink_v<_L> || detail::__is_exception_sink_v<_R>, int> = 0>
auto cuda::experimental::stf::exception_policies::operator|(
_L &&__l,
_R &&__r
)

Alternation: _L gets first claim; if it declines by throwing, _R handles the original exception.

rethrow is the two-sided identity. Same operand constraint as &.

operator|(rethrow_t, __r)#

template<class _R, ::cuda::std::enable_if_t<detail::__normalizes_to_exception_sink_v<_R>, int> = 0>
auto cuda::experimental::stf::exception_policies::operator|(
rethrow_t,
_R &&__r
)

Left identity of |: rethrow | p is __normalize(p) when that result is sink-tagged.

operator|(__l, rethrow_t)#

template<class _L, ::cuda::std::enable_if_t<!::cuda::std::is_same_v<::cuda::std::remove_cvref_t<_L>, rethrow_t> && detail::__normalizes_to_exception_sink_v<_L>, int> = 0>
auto cuda::experimental::stf::exception_policies::operator|(
_L &&__l,
rethrow_t
)

Right identity of |. rethrow itself is excluded so rethrow | rethrow is not ambiguous.