@@ -112,8 +112,9 @@ struct operation_state : test_detail::immovable {
112112
113113struct sender0 {
114114 struct env {};
115- using sender_concept = test_std::sender_t ;
116- using indices_for = ::std::index_sequence_for<>;
115+ using sender_concept = test_std::sender_t ;
116+ using is_basic_sender_tag = void ;
117+ using indices_for = ::std::index_sequence_for<>;
117118 tag t{};
118119 int * data{};
119120 template <typename Receiver>
@@ -124,8 +125,9 @@ struct sender0 {
124125};
125126
126127struct sender1 {
127- using sender_concept = test_std::sender_t ;
128- using indices_for = ::std::index_sequence_for<sender0>;
128+ using sender_concept = test_std::sender_t ;
129+ using is_basic_sender_tag = void ;
130+ using indices_for = ::std::index_sequence_for<sender0>;
129131 tag t{};
130132 int * data{};
131133 sender0 c0{};
@@ -136,8 +138,9 @@ struct sender1 {
136138};
137139
138140struct sender2 {
139- using sender_concept = test_std::sender_t ;
140- using indices_for = ::std::index_sequence_for<sender0, sender0>;
141+ using sender_concept = test_std::sender_t ;
142+ using is_basic_sender_tag = void ;
143+ using indices_for = ::std::index_sequence_for<sender0, sender0>;
141144 tag t{};
142145 int * data{};
143146 sender0 c0{};
@@ -149,8 +152,9 @@ struct sender2 {
149152};
150153
151154struct sender3 {
152- using sender_concept = test_std::sender_t ;
153- using indices_for = ::std::index_sequence_for<sender0, sender0, sender0>;
155+ using sender_concept = test_std::sender_t ;
156+ using is_basic_sender_tag = void ;
157+ using indices_for = ::std::index_sequence_for<sender0, sender0, sender0>;
154158 tag t{};
155159 int * data{};
156160 sender0 c0{};
@@ -163,8 +167,9 @@ struct sender3 {
163167};
164168
165169struct sender4 {
166- using sender_concept = test_std::sender_t ;
167- using indices_for = ::std::index_sequence_for<sender0, sender0, sender0, sender0>;
170+ using sender_concept = test_std::sender_t ;
171+ using is_basic_sender_tag = void ;
172+ using indices_for = ::std::index_sequence_for<sender0, sender0, sender0, sender0>;
168173 tag t{};
169174 int * data{};
170175 sender0 c0{};
@@ -547,28 +552,33 @@ auto test_default_impls_get_state() -> void {
547552 auto operator ==(const data&) const -> bool = default ;
548553 };
549554 struct local_sender0 {
555+ using is_basic_sender_tag = void ;
550556 local_tag t{};
551557 data d{1 , 2 };
552558 };
553559 struct local_sender1 {
560+ using is_basic_sender_tag = void ;
554561 local_tag t{};
555562 data d{1 , 2 };
556563 int i1{};
557564 };
558565 struct local_sender2 {
566+ using is_basic_sender_tag = void ;
559567 local_tag t{};
560568 data d{1 , 2 };
561569 int i1{};
562570 int i2{};
563571 };
564572 struct local_sender3 {
573+ using is_basic_sender_tag = void ;
565574 local_tag t{};
566575 data d{1 , 2 };
567576 int i1{};
568577 int i2{};
569578 int i3{};
570579 };
571580 struct local_sender4 {
581+ using is_basic_sender_tag = void ;
572582 local_tag t{};
573583 data d{1 , 2 };
574584 int i1{};
@@ -665,6 +675,7 @@ auto test_state_type() -> void {
665675 };
666676 struct state {};
667677 struct sender {
678+ using is_basic_sender_tag = void ;
668679 local_tag t;
669680 state s;
670681 };
@@ -679,6 +690,7 @@ auto test_basic_state() -> void {
679690 };
680691 struct data {};
681692 struct local_sender {
693+ using is_basic_sender_tag = void ;
682694 local_tag t;
683695 data d;
684696 };
@@ -717,10 +729,12 @@ auto test_env_type() -> void {
717729 struct data {};
718730 struct local_env {};
719731 struct local_sender {
732+ using is_basic_sender_tag = void ;
720733 local_tag t;
721734 data d;
722735 };
723736 struct sender_with_env {
737+ using is_basic_sender_tag = void ;
724738 local_tag t;
725739 data d;
726740 auto get_env () const noexcept -> local_env { return {}; }
@@ -750,8 +764,9 @@ auto test_basic_receiver() -> void {
750764 auto operator ==(const err&) const -> bool = default ;
751765 };
752766 struct local_sender {
753- local_tag t{};
754- data d{};
767+ using is_basic_sender_tag = local_tag;
768+ is_basic_sender_tag t{};
769+ data d{};
755770 };
756771 struct local_receiver {
757772 T value{};
@@ -766,6 +781,7 @@ auto test_basic_receiver() -> void {
766781 T value;
767782 };
768783 using basic_receiver = test_detail::basic_receiver<local_sender, local_receiver, index>;
784+ static_assert (requires { typename local_sender::is_basic_sender_tag; });
769785 static_assert (test_std::receiver<basic_receiver>);
770786 static_assert (std::same_as<local_tag, typename basic_receiver::tag_t >);
771787 static_assert (
@@ -1098,7 +1114,8 @@ struct basic_sender_tag {
10981114
10991115struct data {};
11001116struct tagged_sender : test_detail::product_type<basic_sender_tag, data, sender0> {
1101- using sender_concept = test_std::sender_t ;
1117+ using sender_concept = test_std::sender_t ;
1118+ using is_basic_sender_tag = void ;
11021119};
11031120} // namespace
11041121namespace std {
0 commit comments