@@ -126,7 +126,20 @@ namespace exec {
126126 };
127127
128128 struct schedule_after_t : __schedule_after_base_t {
129+ #if !STDEXEC_CLANG() || (__clang_major__ >= 16)
129130 using __schedule_after_base_t::operator ();
131+ #else
132+ // clang prior to 16 is not able to find the correct overload in the
133+ // __schedule_after_base_t class.
134+ template <class _Scheduler >
135+ requires __callable<__schedule_after_base_t , _Scheduler, const duration_of_t <_Scheduler>&>
136+ auto operator ()(_Scheduler&& __sched, const duration_of_t <_Scheduler>& __time_point) const
137+ noexcept (
138+ __nothrow_callable<__schedule_after_base_t , _Scheduler, const duration_of_t <_Scheduler>&>)
139+ -> __call_result_t<__schedule_after_base_t, _Scheduler, const duration_of_t<_Scheduler>&> {
140+ return __schedule_after_base_t {}(static_cast <_Scheduler&&>(__sched), __time_point);
141+ }
142+ #endif
130143
131144 template <class _Scheduler >
132145 requires (!__callable<__schedule_after_base_t , _Scheduler, const duration_of_t <_Scheduler>&>)
@@ -138,7 +151,7 @@ namespace exec {
138151 return let_value (
139152 just (),
140153 [__sched, __duration]() noexcept (
141- __nothrow_callable<schedule_at_t , _Scheduler, const time_point_of_t <_Scheduler>& >&&
154+ __nothrow_callable<schedule_at_t , _Scheduler, time_point_of_t <_Scheduler>>&&
142155 __nothrow_callable<now_t , const _Scheduler&>) {
143156 return schedule_at (__sched, now (__sched) + __duration);
144157 });
@@ -185,7 +198,20 @@ namespace exec {
185198 };
186199
187200 struct schedule_at_t : __schedule_at_base_t {
201+ #if !STDEXEC_CLANG() || (__clang_major__ >= 16)
188202 using __schedule_at_base_t::operator ();
203+ #else
204+ // clang prior to 16 is not able to find the correct overload in the
205+ // __schedule_at_base_t class.
206+ template <class _Scheduler >
207+ requires __callable<__schedule_at_base_t , _Scheduler, const time_point_of_t <_Scheduler>&>
208+ auto operator ()(_Scheduler&& __sched, const time_point_of_t <_Scheduler>& __time_point) const
209+ noexcept (
210+ __nothrow_callable<__schedule_at_base_t , _Scheduler, const time_point_of_t <_Scheduler>&>)
211+ -> __call_result_t<__schedule_at_base_t, _Scheduler, const time_point_of_t<_Scheduler>&> {
212+ return __schedule_at_base_t {}(static_cast <_Scheduler&&>(__sched), __time_point);
213+ }
214+ #endif
189215
190216 template <class _Scheduler >
191217 requires (!__callable<__schedule_at_base_t , _Scheduler, const time_point_of_t <_Scheduler>&>)
0 commit comments