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
)

Sequences two policies: on the exception path _L runs then _R, and _R’s answer decides.

noop is the two-sided identity. Constrained so at least one operand is a policy this header defines, so it never hijacks unrelated & expressions; a chain of plain lambdas is therefore not composable, but heading it with noop makes it so.

operator&(noop_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&(
noop_t,
_R &&__r
)

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

operator&(__l, noop_t)#

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

Right identity of &. noop itself is excluded so noop & noop is not ambiguous.