6#ifndef MIMICPP_TYPE_TRAITS_HPP
7#define MIMICPP_TYPE_TRAITS_HPP
34 template <
typename Return,
typename... Params>
37 using type = Return(Params...) noexcept;
40 template <typename Return, typename... Params>
43 using type = Return(Params..., ...) noexcept;
46 template <typename Return, typename... Params>
49 using type = Return(Params...) noexcept;
52 template <typename Return, typename... Params>
55 using type = Return(Params..., ...) noexcept;
58 template <typename Return, typename... Params>
61 using type = Return(Params...) const noexcept;
64 template <typename Return, typename... Params>
67 using type = Return(Params..., ...) const noexcept;
70 template <typename Return, typename... Params>
73 using type = Return(Params...) const noexcept;
76 template <typename Return, typename... Params>
79 using type = Return(Params..., ...) const noexcept;
82 template <typename Return, typename... Params>
85 using type = Return(Params...) &
noexcept;
88 template <
typename Return,
typename... Params>
91 using type = Return(Params..., ...) &
noexcept;
94 template <
typename Return,
typename... Params>
97 using type = Return(Params...) &
noexcept;
100 template <
typename Return,
typename... Params>
103 using type = Return(Params..., ...) &
noexcept;
106 template <
typename Return,
typename... Params>
109 using type = Return(Params...) const & noexcept;
112 template <typename Return, typename... Params>
115 using type = Return(Params..., ...) const & noexcept;
118 template <typename Return, typename... Params>
121 using type = Return(Params...) const & noexcept;
124 template <typename Return, typename... Params>
127 using type = Return(Params..., ...) const & noexcept;
130 template <typename Return, typename... Params>
133 using type = Return(Params...) &&
noexcept;
136 template <
typename Return,
typename... Params>
139 using type = Return(Params..., ...) &&
noexcept;
142 template <
typename Return,
typename... Params>
145 using type = Return(Params...) &&
noexcept;
148 template <
typename Return,
typename... Params>
151 using type = Return(Params..., ...) &&
noexcept;
154 template <
typename Return,
typename... Params>
157 using type = Return(Params...) const && noexcept;
160 template <typename Return, typename... Params>
163 using type = Return(Params..., ...) const && noexcept;
166 template <typename Return, typename... Params>
169 using type = Return(Params...) const && noexcept;
172 template <typename Return, typename... Params>
175 using type = Return(Params..., ...) const && noexcept;
190 template <typename Return, typename... Params>
193 using type = Return(Params...);
196 template <
typename Return,
typename... Params>
199 using type = Return(Params..., ...);
202 template <
typename Return,
typename... Params>
205 using type = Return(Params...);
208 template <
typename Return,
typename... Params>
211 using type = Return(Params..., ...);
214 template <
typename Return,
typename... Params>
217 using type = Return(Params...)
const;
220 template <
typename Return,
typename... Params>
223 using type = Return(Params..., ...)
const;
226 template <
typename Return,
typename... Params>
229 using type = Return(Params...)
const;
232 template <
typename Return,
typename... Params>
235 using type = Return(Params..., ...)
const;
238 template <
typename Return,
typename... Params>
241 using type = Return(Params...) &;
244 template <
typename Return,
typename... Params>
247 using type = Return(Params..., ...) &;
250 template <
typename Return,
typename... Params>
253 using type = Return(Params...) &;
256 template <
typename Return,
typename... Params>
259 using type = Return(Params..., ...) &;
262 template <
typename Return,
typename... Params>
265 using type = Return(Params...) const &;
268 template <typename Return, typename... Params>
271 using type = Return(Params..., ...) const &;
274 template <typename Return, typename... Params>
277 using type = Return(Params...) const &;
280 template <typename Return, typename... Params>
283 using type = Return(Params..., ...) const &;
286 template <typename Return, typename... Params>
289 using type = Return(Params...) &&;
292 template <
typename Return,
typename... Params>
295 using type = Return(Params..., ...) &&;
298 template <
typename Return,
typename... Params>
301 using type = Return(Params...) &&;
304 template <
typename Return,
typename... Params>
307 using type = Return(Params..., ...) &&;
310 template <
typename Return,
typename... Params>
313 using type = Return(Params...) const &&;
316 template <typename Return, typename... Params>
319 using type = Return(Params..., ...) const &&;
322 template <typename Return, typename... Params>
325 using type = Return(Params...) const &&;
328 template <typename Return, typename... Params>
331 using type = Return(Params..., ...) const &&;
346 template <typename Return, typename... Params>
349 using type = Return(Params...);
352 template <
typename Return,
typename... Params>
355 using type = Return(Params...);
358 template <
typename Return,
typename... Params>
361 using type = Return(Params...);
364 template <
typename Return,
typename... Params>
367 using type = Return(Params...);
370 template <
typename Return,
typename... Params>
373 using type = Return(Params...);
376 template <
typename Return,
typename... Params>
379 using type = Return(Params...);
382 template <
typename Return,
typename... Params>
385 using type = Return(Params...);
388 template <
typename Return,
typename... Params>
391 using type = Return(Params...);
394 template <
typename Return,
typename... Params>
397 using type = Return(Params...);
400 template <
typename Return,
typename... Params>
403 using type = Return(Params...);
406 template <
typename Return,
typename... Params>
409 using type = Return(Params...);
412 template <
typename Return,
typename... Params>
415 using type = Return(Params...);
418 template <
typename Return,
typename... Params>
421 using type = Return(Params..., ...);
424 template <
typename Return,
typename... Params>
427 using type = Return(Params..., ...);
430 template <
typename Return,
typename... Params>
433 using type = Return(Params..., ...);
436 template <
typename Return,
typename... Params>
439 using type = Return(Params..., ...);
442 template <
typename Return,
typename... Params>
445 using type = Return(Params..., ...);
448 template <
typename Return,
typename... Params>
451 using type = Return(Params..., ...);
454 template <
typename Return,
typename... Params>
457 using type = Return(Params..., ...);
460 template <
typename Return,
typename... Params>
463 using type = Return(Params..., ...);
466 template <
typename Return,
typename... Params>
469 using type = Return(Params..., ...);
472 template <
typename Return,
typename... Params>
475 using type = Return(Params..., ...);
478 template <
typename Return,
typename... Params>
481 using type = Return(Params..., ...);
484 template <
typename Return,
typename... Params>
487 using type = Return(Params..., ...);
502 template <
typename Signature>
503 requires std::is_function_v<Signature>
509 template <
typename Return,
typename... Params>
515 template <
typename Return,
typename... Params>
533 template <std::
size_t index,
typename Signature>
534 requires std::is_function_v<Signature>
538 signature_decay_t<Signature>>
542 template <std::size_t index,
typename Return,
typename... Params>
544 :
public std::tuple_element<index, std::tuple<Params...>>
560 template <
typename Signature>
561 requires std::is_function_v<Signature>
564 signature_decay_t<Signature>>
568 template <
typename Return,
typename... Params>
571 using type = std::tuple<Params...>;
580 template <
typename First,
typename Second,
bool reversed = false>
582 :
public std::conditional_t<
585 is_overloadable_with<Second, First, true>>
589 template <
typename First,
typename Second>
592 signature_param_list_t<signature_decay_t<First>>,
593 signature_param_list_t<signature_decay_t<Second>>>)
594 struct is_overloadable_with<First, Second, false>
595 :
public std::true_type
599 template <
typename Return1,
typename Return2,
typename... Params,
bool reversed>
600 struct is_overloadable_with<Return1(Params...), Return2(Params...) const, reversed>
601 :
public std::true_type
605 template <
typename Return1,
typename Return2,
typename... Params,
bool reversed>
606 struct is_overloadable_with<Return1(Params...) &, Return2(Params...) const &, reversed>
607 : public std::true_type
611 template <
typename Return1,
typename Return2,
typename... Params,
bool reversed>
612 struct is_overloadable_with<Return1(Params...) &, Return2(Params...) &&, reversed>
613 :
public std::true_type
617 template <
typename Return1,
typename Return2,
typename... Params,
bool reversed>
618 struct is_overloadable_with<Return1(Params...) &, Return2(Params...) const &&, reversed>
619 : public std::true_type
623 template <
typename Return1,
typename Return2,
typename... Params,
bool reversed>
624 struct is_overloadable_with<Return1(Params...) const &, Return2(Params...) &&, reversed>
625 :
public std::true_type
629 template <
typename Return1,
typename Return2,
typename... Params,
bool reversed>
630 struct is_overloadable_with<Return1(Params...) const &, Return2(Params...) const &&, reversed>
631 : public std::true_type
635 template <
typename Return1,
typename Return2,
typename... Params,
bool reversed>
636 struct is_overloadable_with<Return1(Params...) &&, Return2(Params...) const &&, reversed>
637 : public std::true_type
650 template <
typename First,
typename Second>
652 :
public detail::is_overloadable_with<
653 signature_remove_noexcept_t<First>,
654 signature_remove_noexcept_t<Second>>
670 template <
typename First>
672 :
public std::true_type
676 template <
typename First,
typename Second,
typename... Others>
678 :
public std::conjunction<
679 is_overloadable_with<First, Second>,
680 is_overload_set<First, Others...>,
681 is_overload_set<Second, Others...>>
Definition BoostTest.hpp:20
Primary template, purposely undefined.
Definition Fwd.hpp:137
Definition TypeTraits.hpp:655
Return(Params...,...) &noexcept type
Definition TypeTraits.hpp:91
Return(Params...,...) &&noexcept type
Definition TypeTraits.hpp:139
Return(Params...,...) &&noexcept type
Definition TypeTraits.hpp:151
Return(Params...,...) &noexcept type
Definition TypeTraits.hpp:103
Return(Params...,...) const noexcept type
Definition TypeTraits.hpp:67
Return(Params...,...) const &noexcept type
Definition TypeTraits.hpp:115
Return(Params...,...) const &&noexcept type
Definition TypeTraits.hpp:163
Return(Params...,...) const &&noexcept type
Definition TypeTraits.hpp:175
Return(Params...,...) const &noexcept type
Definition TypeTraits.hpp:127
Return(Params...,...) const noexcept type
Definition TypeTraits.hpp:79
Return(Params...,...) noexcept type
Definition TypeTraits.hpp:55
Return(Params...,...) noexcept type
Definition TypeTraits.hpp:43
Return(Params...) &noexcept type
Definition TypeTraits.hpp:85
Return(Params...) &&noexcept type
Definition TypeTraits.hpp:133
Return(Params...) &&noexcept type
Definition TypeTraits.hpp:145
Return(Params...) &noexcept type
Definition TypeTraits.hpp:97
Return(Params...) const noexcept type
Definition TypeTraits.hpp:61
Return(Params...) const &noexcept type
Definition TypeTraits.hpp:109
Return(Params...) const &&noexcept type
Definition TypeTraits.hpp:157
Return(Params...) const &&noexcept type
Definition TypeTraits.hpp:169
Return(Params...) const &noexcept type
Definition TypeTraits.hpp:121
Return(Params...) const noexcept type
Definition TypeTraits.hpp:73
Return(Params...) noexcept type
Definition TypeTraits.hpp:49
Return(Params...) noexcept type
Definition TypeTraits.hpp:37
Primary template, purposely undefined.
Definition Fwd.hpp:28
Return(Params...,...) type
Definition TypeTraits.hpp:433
Return(Params...,...) type
Definition TypeTraits.hpp:445
Return(Params...,...) type
Definition TypeTraits.hpp:481
Return(Params...,...) type
Definition TypeTraits.hpp:469
Return(Params...,...) type
Definition TypeTraits.hpp:427
Return(Params...,...) type
Definition TypeTraits.hpp:439
Return(Params...,...) type
Definition TypeTraits.hpp:451
Return(Params...,...) type
Definition TypeTraits.hpp:487
Return(Params...,...) type
Definition TypeTraits.hpp:475
Return(Params...,...) type
Definition TypeTraits.hpp:463
Return(Params...,...) type
Definition TypeTraits.hpp:457
Return(Params...,...) type
Definition TypeTraits.hpp:421
Return(Params...) type
Definition TypeTraits.hpp:361
Return(Params...) type
Definition TypeTraits.hpp:373
Return(Params...) type
Definition TypeTraits.hpp:409
Return(Params...) type
Definition TypeTraits.hpp:397
Return(Params...) type
Definition TypeTraits.hpp:355
Return(Params...) type
Definition TypeTraits.hpp:367
Return(Params...) type
Definition TypeTraits.hpp:379
Return(Params...) type
Definition TypeTraits.hpp:415
Return(Params...) type
Definition TypeTraits.hpp:403
Return(Params...) type
Definition TypeTraits.hpp:391
Return(Params...) type
Definition TypeTraits.hpp:385
Return(Params...) type
Definition TypeTraits.hpp:349
Primary template, purposely undefined.
Definition Fwd.hpp:60
std::tuple< Params... > type
Definition TypeTraits.hpp:571
Primary template, purposely undefined.
Definition Fwd.hpp:108
Primary template, purposely undefined.
Definition Fwd.hpp:92
Return(Params...,...) & type
Definition TypeTraits.hpp:247
Return(Params...,...) && type
Definition TypeTraits.hpp:295
Return(Params...,...) && type
Definition TypeTraits.hpp:307
Return(Params...,...) & type
Definition TypeTraits.hpp:259
Return(Params...,...) const type
Definition TypeTraits.hpp:223
Return(Params...,...) const & type
Definition TypeTraits.hpp:271
Return(Params...,...) const && type
Definition TypeTraits.hpp:319
Return(Params...,...) const && type
Definition TypeTraits.hpp:331
Return(Params...,...) const & type
Definition TypeTraits.hpp:283
Return(Params...,...) const type
Definition TypeTraits.hpp:235
Return(Params...,...) type
Definition TypeTraits.hpp:211
Return(Params...,...) type
Definition TypeTraits.hpp:199
Return(Params...) & type
Definition TypeTraits.hpp:241
Return(Params...) && type
Definition TypeTraits.hpp:289
Return(Params...) && type
Definition TypeTraits.hpp:301
Return(Params...) & type
Definition TypeTraits.hpp:253
Return(Params...) const type
Definition TypeTraits.hpp:217
Return(Params...) const & type
Definition TypeTraits.hpp:265
Return(Params...) const && type
Definition TypeTraits.hpp:313
Return(Params...) const && type
Definition TypeTraits.hpp:325
Return(Params...) const & type
Definition TypeTraits.hpp:277
Return(Params...) const type
Definition TypeTraits.hpp:229
Return(Params...) type
Definition TypeTraits.hpp:205
Return(Params...) type
Definition TypeTraits.hpp:193
Primary template, purposely undefined.
Definition Fwd.hpp:44
Return type
Definition TypeTraits.hpp:518
Return type
Definition TypeTraits.hpp:512
Primary template, purposely undefined.
Definition Fwd.hpp:76
std::uint8_t type
Definition TypeTraits.hpp:704
std::uint16_t type
Definition TypeTraits.hpp:713
std::uint32_t type
Definition TypeTraits.hpp:722
std::uint64_t type
Definition TypeTraits.hpp:731
Primary template, purposely undefined.
Definition Fwd.hpp:154