@@ -322,40 +322,40 @@ namespace exec {
322322 return __result_t ();
323323 } else if constexpr (sizeof ...(_Env) == 0 ) {
324324 return STDEXEC ::__dependent_sender<_Sequence>();
325- } else if constexpr ((__is_debug_env<_Env> || ...)) {
326- // This ought to cause a hard error that indicates where the problem is.
327- using __item_types_t [[maybe_unused]] = STDEXEC ::__mconstant<STDEXEC_REMOVE_REFERENCE (
328- _Sequence)::template get_item_types<_Sequence, _Env...>()>;
329- return __debug::__item_types ();
330325 } else {
331326 return __unrecognized_sequence_error_t <_Sequence, _Env...>();
332327 }
333328 }
334329
335330 struct get_item_types_t {
336- template <class _Sequence , class ... _Env>
337- constexpr auto operator ()(_Sequence&&, const _Env&...) const noexcept {
338- using _NewSequence = STDEXEC ::__maybe_transform_sender_t <_Sequence, _Env...>;
339- if constexpr (STDEXEC ::__merror<_NewSequence>) {
340- return exec::__invalid_item_types (_NewSequence ());
341- } else {
342- return __sequence_sndr::__get_item_types_helper<_NewSequence, _Env...>();
343- }
331+ template <class _Sequence >
332+ constexpr auto operator ()(_Sequence&&) const noexcept {
333+ return __sequence_sndr::__get_item_types_helper<_Sequence>();
334+ }
335+
336+ template <class _Sequence , class _Env >
337+ constexpr auto operator ()(_Sequence&&, const _Env&) const noexcept {
338+ using __new_sequence_t = transform_sender_result_t <_Sequence, _Env>;
339+ static_assert (!STDEXEC ::__merror<__new_sequence_t >);
340+ return __sequence_sndr::__get_item_types_helper<__new_sequence_t , _Env>();
344341 }
345342 };
346343 } // namespace __sequence_sndr
347344
348345 using __sequence_sndr::get_item_types_t ; // for backwards compatibility
349346
350- template <class _Sequence , class ... _Env >
347+ template <class _Sequence >
351348 [[nodiscard]]
352349 consteval auto get_item_types () {
353- using _NewSequence = STDEXEC ::__maybe_transform_sender_t <_Sequence, _Env...>;
354- if constexpr (STDEXEC ::__merror<_NewSequence>) {
355- return exec::__invalid_item_types (_NewSequence ());
356- } else {
357- return __sequence_sndr::__get_item_types_helper<_NewSequence, _Env...>();
358- }
350+ return __sequence_sndr::__get_item_types_helper<_Sequence>();
351+ }
352+
353+ template <class _Sequence , class _Env >
354+ [[nodiscard]]
355+ consteval auto get_item_types () {
356+ using __new_sequence_t = STDEXEC ::transform_sender_result_t <_Sequence, _Env>;
357+ static_assert (!STDEXEC ::__merror<__new_sequence_t >);
358+ return __sequence_sndr::__get_item_types_helper<__new_sequence_t , _Env>();
359359 }
360360
361361 // Legacy interface:
@@ -429,7 +429,8 @@ namespace exec {
429429 struct _THE_CALL_TO_GET_ITEM_TYPES_IS_ILL_FORMED_ { };
430430
431431 template <class _Sequence >
432- requires (!STDEXEC ::__merror<_Sequence>) && (!STDEXEC ::__minvocable_q<__item_types_of_t , _Sequence>)
432+ requires (!STDEXEC ::__merror<_Sequence>)
433+ && (!STDEXEC ::__minvocable_q<__item_types_of_t , _Sequence>)
433434 auto __check_sequence (_Sequence*) -> STDEXEC::__mexception<
434435 STDEXEC::_WHAT_(_ERROR_WHILE_COMPUTING_THE_SEQUENCE_ITEM_TYPES_),
435436 STDEXEC::_WHY_(_THE_CALL_TO_GET_ITEM_TYPES_IS_ILL_FORMED_),
0 commit comments