@@ -63,32 +63,49 @@ template <stdx::ct_string Name, typename Tag, typename... Vs> struct sender {
6363 return prop{completes_synchronously_t {}, std::true_type{}};
6464 }
6565};
66+
67+ template <channel_tag Tag> constexpr inline auto name = stdx::ct_string{" " };
68+
69+ template <>
70+ constexpr inline auto name<set_value_t > = stdx::ct_string{" just_value" };
71+ template <>
72+ constexpr inline auto name<set_error_t > = stdx::ct_string{" just_error" };
73+ template <>
74+ constexpr inline auto name<set_stopped_t > = stdx::ct_string{" just_stopped" };
6675} // namespace _just
6776
68- template <stdx::ct_string Name = " just" , typename ... Vs>
77+ template <channel_tag Tag = set_value_t ,
78+ stdx::ct_string Name = _just::name<Tag>, typename ... Vs>
6979[[nodiscard]] constexpr auto just (Vs &&...vs) -> sender auto {
70- return _just::sender<Name, set_value_t , std::remove_cvref_t <Vs>...>{
80+ static_assert (sizeof ...(Vs) == 0 or not std::same_as<Tag, set_stopped_t >,
81+ " Can't send any values on the stopped channel" );
82+
83+ return _just::sender<Name, Tag, std::remove_cvref_t <Vs>...>{
7184 {std::forward<Vs>(vs)...}};
7285}
7386
74- template <stdx::ct_string Name = " just_error" , typename ... Vs>
87+ template <stdx::ct_string Name = _just::name<set_value_t >, typename ... Vs>
88+ [[nodiscard]] constexpr auto just_value (Vs &&...vs) -> sender auto {
89+ return just<set_value_t , Name>(std::forward<Vs>(vs)...);
90+ }
91+
92+ template <stdx::ct_string Name = _just::name<set_error_t >, typename ... Vs>
7593[[nodiscard]] constexpr auto just_error (Vs &&...vs) -> sender auto {
76- return _just::sender<Name, set_error_t , std::remove_cvref_t <Vs>...>{
77- {std::forward<Vs>(vs)...}};
94+ return just<set_error_t , Name>(std::forward<Vs>(vs)...);
7895}
7996
80- template <stdx::ct_string Name = " just_stopped " >
97+ template <stdx::ct_string Name = _just::name< set_stopped_t > >
8198[[nodiscard]] constexpr auto just_stopped () -> sender auto {
82- return _just::sender<Name, set_stopped_t >{} ;
99+ return just< set_stopped_t , Name>() ;
83100}
84101
85- struct just_t ;
102+ struct just_value_t ;
86103struct just_error_t ;
87104struct just_stopped_t ;
88105
89106template <typename Tag>
90107using just_tag_for =
91- stdx::conditional_t <std::same_as<Tag, set_value_t >, just_t ,
108+ stdx::conditional_t <std::same_as<Tag, set_value_t >, just_value_t ,
92109 stdx::conditional_t <std::same_as<Tag, set_error_t >,
93110 just_error_t , just_stopped_t >>;
94111
0 commit comments