Skip to content

Commit 514f239

Browse files
authored
Merge pull request #1803 from ericniebler/meta-diagnostic-cleanup
clean-up of the metaprogramming utilities and diagnostics
2 parents 8251193 + afe7813 commit 514f239

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+294
-559
lines changed

include/exec/fork_join.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ namespace exec {
265265
return _child_completions_t{};
266266
} else if constexpr (!__decay_copyable_results_t::value) {
267267
return _ERROR_<
268-
_WHAT_<>(PREDECESSOR_RESULTS_ARE_NOT_DECAY_COPYABLE),
268+
_WHAT_(PREDECESSOR_RESULTS_ARE_NOT_DECAY_COPYABLE),
269269
_IN_ALGORITHM_(exec::fork_join_t)
270270
>();
271271
} else {

include/exec/into_tuple.hpp

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,14 @@ namespace exec {
2323
namespace __into_tuple {
2424
using namespace STDEXEC;
2525

26-
template <
27-
__mstring _Where = "In into_tuple: "_mstr,
28-
__mstring _What = "The input sender must have at exactly one possible value completion"_mstr
29-
>
30-
struct _INVALID_ARGUMENT_TO_INTO_TUPLE_ { };
26+
struct into_tuple_t;
27+
struct _THE_INPUT_SENDER_MUST_HAVE_AT_EXACTLY_ONE_POSSIBLE_VALUE_COMPLETION_ { };
3128

3229
template <class _Sender, class _Env>
3330
using __too_many_completions_error = __mexception<
34-
_INVALID_ARGUMENT_TO_INTO_TUPLE_<>,
31+
_WHAT_(_INVALID_ARGUMENT_),
32+
_WHY_(_THE_INPUT_SENDER_MUST_HAVE_AT_EXACTLY_ONE_POSSIBLE_VALUE_COMPLETION_),
33+
_WHERE_(_IN_ALGORITHM_, into_tuple_t),
3534
_WITH_PRETTY_SENDER_<_Sender>,
3635
_WITH_ENVIRONMENT_(_Env)
3736
>;

include/exec/just_from.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ namespace exec {
4646

4747
template <class... Ts>
4848
using _error_t = STDEXEC::_ERROR_<
49-
STDEXEC::_WHAT_<>(_diag_t),
49+
STDEXEC::_WHAT_(_diag_t),
5050
STDEXEC::_WHERE_(STDEXEC::_IN_ALGORITHM_, JustTag),
5151
STDEXEC::_WITH_COMPLETION_SIGNATURE_<_set_tag_t(Ts...)>
5252
>;

include/exec/libdispatch_queue.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ namespace exec {
124124
__libdispatch_bulk::transform_bulk{*sched.queue_}, std::forward<Sender>(sndr));
125125
} else {
126126
return STDEXEC::__not_a_sender<
127-
STDEXEC::_WHAT_<>(CANNOT_DISPATCH_THE_BULK_ALGORITHM_TO_THE_LIBDISPATCH_SCHEDULER),
127+
STDEXEC::_WHAT_(CANNOT_DISPATCH_THE_BULK_ALGORITHM_TO_THE_LIBDISPATCH_SCHEDULER),
128128
STDEXEC::_WHY_(BECAUSE_THERE_IS_NO_LIBDISPATCH_SCHEDULER_IN_THE_ENVIRONMENT),
129129
STDEXEC::_WHERE_(STDEXEC::_IN_ALGORITHM_, STDEXEC::bulk_t),
130130
STDEXEC::_TO_FIX_THIS_ERROR_(

include/exec/repeat_n.hpp

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ namespace exec {
146146
};
147147

148148
struct repeat_n_t;
149-
struct _REPEAT_N_EXPECTS_A_SENDER_OF_VOID_;
149+
struct _THE_INPUT_SENDER_MUST_HAVE_VOID_VALUE_COMPLETION_;
150150

151151
template <class _Child, class... _Args>
152152
using __values_t =
@@ -155,8 +155,9 @@ namespace exec {
155155
(sizeof...(_Args) == 0),
156156
completion_signatures<>,
157157
__mexception<
158-
_REPEAT_N_EXPECTS_A_SENDER_OF_VOID_,
158+
_WHAT_(_INVALID_ARGUMENT_),
159159
_WHERE_(_IN_ALGORITHM_, repeat_n_t),
160+
_WHY_(_THE_INPUT_SENDER_MUST_HAVE_VOID_VALUE_COMPLETION_),
160161
_WITH_PRETTY_SENDER_<_Child>
161162
>
162163
>;
@@ -187,12 +188,12 @@ namespace exec {
187188
static constexpr auto connect = //
188189
[]<class _Receiver, class _Sender>(_Sender &&__sndr, _Receiver &&__rcvr) noexcept(
189190
noexcept(__opstate(0, STDEXEC::__get<2>(__declval<_Sender>()), __declval<_Receiver>()))) {
190-
const std::size_t __count = STDEXEC::__get<1>(__sndr);
191-
return __opstate(
192-
__count,
193-
STDEXEC::__get<2>(static_cast<_Sender &&>(__sndr)),
194-
static_cast<_Receiver &&>(__rcvr));
195-
};
191+
const std::size_t __count = STDEXEC::__get<1>(__sndr);
192+
return __opstate(
193+
__count,
194+
STDEXEC::__get<2>(static_cast<_Sender &&>(__sndr)),
195+
static_cast<_Receiver &&>(__rcvr));
196+
};
196197
};
197198

198199
struct repeat_n_t {

include/exec/repeat_until.hpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -181,10 +181,9 @@ namespace exec {
181181
completion_signatures<set_value_t()>
182182
>,
183183
__mexception<
184-
_WHAT_<>(
185-
_INVALID_ARGUMENT_,
186-
_EXPECTING_A_SENDER_OF_ONE_VALUE_THAT_IS_CONVERTIBLE_TO_BOOL_),
184+
_WHAT_(_INVALID_ARGUMENT_),
187185
_WHERE_(_IN_ALGORITHM_, repeat_until_t),
186+
_WHY_(_EXPECTING_A_SENDER_OF_ONE_VALUE_THAT_IS_CONVERTIBLE_TO_BOOL_),
188187
_WITH_PRETTY_SENDER_<_Child>
189188
>
190189
>;
@@ -260,7 +259,7 @@ namespace exec {
260259
return repeat_until_t()(then(static_cast<__child_t &&>(__child), _never{}));
261260
} else {
262261
return __not_a_sender<
263-
_WHAT_<>(_INVALID_ARGUMENT_, _EXPECTING_A_SENDER_OF_VOID_),
262+
_WHAT_(_INVALID_ARGUMENT_, _EXPECTING_A_SENDER_OF_VOID_),
264263
_WHERE_(_IN_ALGORITHM_, repeat_until_t),
265264
_WITH_PRETTY_SENDER_<__child_t>,
266265
_WITH_ENVIRONMENT_(_Env)

include/exec/reschedule.hpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,19 @@
1919

2020
namespace exec {
2121
namespace __resched {
22-
2322
using namespace STDEXEC;
2423

25-
template <
26-
__mstring _Where = "In reschedule() ..."_mstr,
27-
__mstring _What =
28-
"The execution environment does not have a current scheduler on which to reschedule."_mstr
29-
>
30-
struct _INVALID_RESCHEDULE_NO_SCHEDULER_ { };
24+
struct reschedule_t;
25+
struct _CANNOT_RESCHEDULE_ { };
26+
struct _THE_CURRENT_EXECUTION_ENVIRONMENT_DOESNT_HAVE_A_SCHEDULER_ { };
3127

3228
template <class _Env>
33-
using __no_scheduler_error =
34-
__mexception<_INVALID_RESCHEDULE_NO_SCHEDULER_<>, _WITH_ENVIRONMENT_(_Env)>;
29+
using __no_scheduler_error = __mexception<
30+
_WHAT_(_CANNOT_RESCHEDULE_),
31+
_WHY_(_THE_CURRENT_EXECUTION_ENVIRONMENT_DOESNT_HAVE_A_SCHEDULER_),
32+
_WHERE_(_IN_ALGORITHM_, reschedule_t),
33+
_WITH_ENVIRONMENT_(_Env)
34+
>;
3535

3636
template <class _Env>
3737
using __schedule_sender_t = schedule_result_t<__call_result_t<get_scheduler_t, _Env>>;
@@ -75,7 +75,7 @@ namespace exec {
7575
constexpr auto operator==(const __scheduler&) const noexcept -> bool = default;
7676
};
7777

78-
struct __reschedule_t {
78+
struct reschedule_t {
7979
template <sender _Sender>
8080
constexpr auto operator()(_Sender&& __sndr) const {
8181
return STDEXEC::continues_on(static_cast<_Sender&&>(__sndr), __resched::__scheduler{});
@@ -87,5 +87,5 @@ namespace exec {
8787
};
8888
} // namespace __resched
8989

90-
inline constexpr auto reschedule = __resched::__reschedule_t{};
90+
inline constexpr auto reschedule = __resched::reschedule_t{};
9191
} // namespace exec

include/exec/sequence/merge_each.hpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
namespace exec {
4040
namespace __merge_each {
4141
using namespace STDEXEC;
42+
struct merge_each_t;
4243

4344
struct __env_with_inplace_stop_token_t {
4445
auto operator()(inplace_stop_token& __stop_token) const noexcept {
@@ -756,7 +757,7 @@ namespace exec {
756757
template <class _OperationBase>
757758
using __receive_nested_values_t = __minvoke<__mtry_q<__receive_nested_values>, _OperationBase>;
758759

759-
struct _INVALID_ARGUMENT_TO_MERGE_WITH_REQUIRES_A_SEQUENCE_OF_SEQUENCES_ { };
760+
struct _MERGE_WITH_REQUIRES_A_SEQUENCE_OF_SEQUENCES_ { };
760761

761762
template <class _Sequence, class _Sender, class... _Env>
762763
struct __value_completions_error {
@@ -765,7 +766,9 @@ namespace exec {
765766
sizeof...(_Env) == 0 && sizeof...(_Args) == 1 && (dependent_sender<_Args> && ...),
766767
STDEXEC::__mexception<dependent_sender_error, _WITH_PRETTY_SENDER_<_Args>...>,
767768
STDEXEC::__mexception<
768-
_INVALID_ARGUMENT_TO_MERGE_WITH_REQUIRES_A_SEQUENCE_OF_SEQUENCES_,
769+
_WHAT_(_INVALID_ARGUMENT_),
770+
_WHERE_(_IN_ALGORITHM_, merge_each_t),
771+
_WHY_(_MERGE_WITH_REQUIRES_A_SEQUENCE_OF_SEQUENCES_),
769772
_WITH_PRETTY_SEQUENCE_<_Sequence>,
770773
_WITH_PRETTY_SENDER_<_Sender>,
771774
__fn_t<_WITH_ENVIRONMENT_, _Env>...,

include/exec/sequence_senders.hpp

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -226,16 +226,10 @@ namespace exec {
226226
struct __item_types { };
227227
} // namespace __debug
228228

229-
namespace __errs {
230-
using namespace STDEXEC;
231-
inline constexpr __mstring __unrecognized_sequence_type_diagnostic =
232-
"The given type cannot be used as a sequence with the given environment "
233-
"because the attempt to compute the item types failed."_mstr;
234-
} // namespace __errs
235-
236-
template <STDEXEC::__mstring _Diagnostic = __errs::__unrecognized_sequence_type_diagnostic>
237229
struct _UNRECOGNIZED_SEQUENCE_TYPE_;
238230

231+
struct _FAILED_TO_COMPUTE_SEQUENCE_ITEM_TYPES_ { };
232+
239233
#if STDEXEC_NO_STD_CONSTEXPR_EXCEPTIONS()
240234

241235
template <class... _What, class... _Values>
@@ -268,7 +262,8 @@ namespace exec {
268262

269263
template <class _Sequence, class... _Env>
270264
using __unrecognized_sequence_error_t = STDEXEC::__mexception<
271-
_UNRECOGNIZED_SEQUENCE_TYPE_<>,
265+
STDEXEC::_WHAT_(_UNRECOGNIZED_SEQUENCE_TYPE_),
266+
STDEXEC::_WHY_(_FAILED_TO_COMPUTE_SEQUENCE_ITEM_TYPES_),
272267
_WITH_PRETTY_SEQUENCE_<_Sequence>,
273268
STDEXEC::_WITH_ENVIRONMENT_(_Env)...
274269
>;
@@ -301,6 +296,7 @@ namespace exec {
301296

302297
template <class _Sequence, class... _Env>
303298
concept __with_member_alias = __mvalid<__member_alias_t, _Sequence, _Env...>;
299+
304300
template <class _Sequence, class... _Env>
305301
concept __with_consteval_static_member =
306302
__mvalid<__consteval_static_member_result_t, _Sequence, _Env...>;
@@ -393,12 +389,12 @@ namespace exec {
393389
concept sequence_sender = STDEXEC::sender_in<_Sequence, _Env...>
394390
&& enable_sequence_sender<STDEXEC::__decay_t<_Sequence>>;
395391

396-
template <class _Item>
397392
struct _SEQUENCE_ITEM_IS_NOT_A_WELL_FORMED_SENDER_ { };
398393

399394
template <class _Sequence, class _Item>
400395
constexpr auto __check_item(_Item*) -> STDEXEC::__mexception<
401-
_SEQUENCE_ITEM_IS_NOT_A_WELL_FORMED_SENDER_<_Item>,
396+
STDEXEC::_WHAT_(_SEQUENCE_ITEM_IS_NOT_A_WELL_FORMED_SENDER_),
397+
STDEXEC::_WITH_PRETTY_SENDER_<_Item>,
402398
_WITH_PRETTY_SEQUENCE_<_Sequence>
403399
>;
404400

@@ -410,13 +406,17 @@ namespace exec {
410406
requires STDEXEC::__merror<_Items>
411407
auto __check_items(_Items*) -> _Items;
412408

413-
template <class _Item>
414409
struct _SEQUENCE_GET_ITEM_TYPES_RESULT_IS_NOT_WELL_FORMED_ { };
415410

411+
template <template <class...> class _Class>
412+
struct _EXPECTED_A_SPECIALIZATION_OF_ { };
413+
416414
template <class _Sequence, class _Items>
417415
requires(!STDEXEC::__merror<_Items>)
418416
auto __check_items(_Items*) -> STDEXEC::__mexception<
419-
_SEQUENCE_GET_ITEM_TYPES_RESULT_IS_NOT_WELL_FORMED_<_Items>,
417+
STDEXEC::_WHAT_(_SEQUENCE_GET_ITEM_TYPES_RESULT_IS_NOT_WELL_FORMED_),
418+
STDEXEC::_WHY_(_EXPECTED_A_SPECIALIZATION_OF_<item_types>),
419+
STDEXEC::_WITH_TYPE_<_Items>,
420420
_WITH_PRETTY_SEQUENCE_<_Sequence>
421421
>;
422422

@@ -435,12 +435,14 @@ namespace exec {
435435
requires STDEXEC::__merror<_Sequence>
436436
auto __check_sequence(_Sequence*) -> _Sequence;
437437

438-
struct _SEQUENCE_GET_ITEM_TYPES_IS_NOT_WELL_FORMED_ { };
438+
struct _ERROR_WHILE_COMPUTING_THE_SEQUENCE_ITEM_TYPES_ { };
439+
struct _THE_CALL_TO_GET_ITEM_TYPES_IS_ILL_FORMED_ { };
439440

440441
template <class _Sequence>
441442
requires(!STDEXEC::__merror<_Sequence>) && (!STDEXEC::__mvalid<__item_types_of_t, _Sequence>)
442443
auto __check_sequence(_Sequence*) -> STDEXEC::__mexception<
443-
_SEQUENCE_GET_ITEM_TYPES_IS_NOT_WELL_FORMED_,
444+
STDEXEC::_WHAT_(_ERROR_WHILE_COMPUTING_THE_SEQUENCE_ITEM_TYPES_),
445+
STDEXEC::_WHY_(_THE_CALL_TO_GET_ITEM_TYPES_IS_ILL_FORMED_),
444446
_WITH_PRETTY_SEQUENCE_<_Sequence>
445447
>;
446448

@@ -525,12 +527,12 @@ namespace exec {
525527
_Data __data_{};
526528
};
527529

528-
template <class _Item>
529530
struct _MISSING_SET_NEXT_OVERLOAD_FOR_ITEM_ { };
530531

531532
template <class _Receiver, class _Item>
532533
constexpr auto __try_item(_Item*) -> STDEXEC::__mexception<
533-
_MISSING_SET_NEXT_OVERLOAD_FOR_ITEM_<_Item>,
534+
STDEXEC::_WHAT_(_MISSING_SET_NEXT_OVERLOAD_FOR_ITEM_),
535+
STDEXEC::_WITH_PRETTY_SENDER_<_Item>,
534536
STDEXEC::_WITH_RECEIVER_(_Receiver)
535537
>;
536538

include/exec/static_thread_pool.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,7 @@ namespace exec {
302302
return __apply(_transform_bulk{*sched.pool_}, static_cast<Sender&&>(sndr));
303303
} else {
304304
return STDEXEC::__not_a_sender<
305-
STDEXEC::_WHAT_<>(
305+
STDEXEC::_WHAT_(
306306
CANNOT_DISPATCH_THE_BULK_ALGORITHM_TO_THE_STATIC_THREAD_POOL_SCHEDULER),
307307
STDEXEC::_WHY_(BECAUSE_THERE_IS_NO_STATIC_THREAD_POOL_SCHEDULER_IN_THE_ENVIRONMENT),
308308
STDEXEC::_WHERE_(STDEXEC::_IN_ALGORITHM_, tag_of_t<Sender>),
@@ -323,7 +323,7 @@ namespace exec {
323323
return __apply(_transform_iterate{*sched.pool_}, static_cast<Sender&&>(sndr));
324324
} else {
325325
return STDEXEC::__not_a_sender<
326-
STDEXEC::_WHAT_<>(
326+
STDEXEC::_WHAT_(
327327
CANNOT_DISPATCH_THE_ITERATE_ALGORITHM_TO_THE_STATIC_THREAD_POOL_SCHEDULER),
328328
STDEXEC::_WHY_(BECAUSE_THERE_IS_NO_STATIC_THREAD_POOL_SCHEDULER_IN_THE_ENVIRONMENT),
329329
STDEXEC::_WHERE_(STDEXEC::_IN_ALGORITHM_, exec::iterate_t),

0 commit comments

Comments
 (0)