2
3
4
5
6
7
8
11#ifndef _MSTD_FUNCTION_TRAITS_HPP_
12 #define _MSTD_FUNCTION_TRAITS_HPP_
14 #include <mstd/config.hpp>
17_MSTD_WARNING(
"this is only available for c++17 and greater!");
20 #include <mstd/functions_libs.hpp>
24 #pragma region DEFAULT_TYPE_TRAITS
26 template<
bool IsMember>
45 #pragma region CORE_TRAITS
46 template<
class F,
class C =
void>
49 template<
class R,
class... Args>
67 template<
class R,
class... Args,
class C>
75 #pragma region FUNCTION_TRAITS
77 template<
class F,
class C =
void>
85 template<
class R,
class... Args>
92 template<
class R,
class...
Args>
101 #pragma region MEMBER
104 template<
class R,
class... Args,
class C>
111 template<
class R,
class... Args,
class C>
119 template<
class C,
class R,
class... Args>
127 template<
class C,
class R,
class... Args>
135 template<
class C,
class R,
class... Args>
143 template<
class C,
class R,
class... Args>
153 template<
class C,
class R,
class... Args>
161 template<
class C,
class R,
class... Args>
169 template<
class C,
class R,
class... Args>
177 template<
class C,
class R,
class... Args>
186 #pragma region CONST_VOLATILE
189 template<
class C,
class R,
class... Args>
197 template<
class C,
class R,
class... Args>
205 template<
class C,
class R,
class...
Args>
214 #pragma region CONST_VOLATILE_PARENT_REF
217 template<
class C,
class R,
class...
Args>
226 #pragma region CONST_VOLATILE_PARENT_MOVED
229 template<
class C,
class R,
class...
Args>
238 #pragma region CONST_PARENT_REF
241 template<
class C,
class R,
class...
Args>
250 #pragma region CONST_PARENT_MOVED
253 template<
class C,
class R,
class...
Args>
262 #pragma region VOLATILE
265 template<
class C,
class R,
class... Args>
273 template<
class C,
class R,
class... Args>
281 template<
class C,
class R,
class...
Args>
290 #pragma region VOLATILE_PARENT_REF
293 template<
class C,
class R,
class...
Args>
302 #pragma region VOLATILE_PARENT_MOVED
305 template<
class C,
class R,
class...
Args>
314 #pragma region PARENT_REF
317 template<
class C,
class R,
class...
Args>
326 #pragma region PARENT_MOVED
329 template<
class C,
class R,
class...
Args>
339 #pragma region STD_FUNCTION
342 template<
class R,
class... Args>
353 #pragma region STATIC_POINTER
356 template<
class R,
class... Args>
362 template<
class R,
class...
Args>
369 #pragma region STATIC_REFERENCE
372 template<
class R,
class... Args>
378 template<
class R,
class...
Args>
385 #pragma region STATIC_MOVED
388 template<
class R,
class... Args>
394 template<
class R,
class...
Args>
401 #pragma region LAMBDA_AND_FUNCTORS
413 #pragma region MEMBER_POINTER
416 template<
class C,
class R,
class... Args>
420 template<
class C,
class R,
class... Args>
424 template<
class C,
class R,
class... Args>
428 template<
class C,
class R,
class... Args>
432 template<
class C,
class R,
class... Args>
436 template<
class C,
class R,
class...
Args>
442 template<
class C,
class R,
class... Args>
446 template<
class C,
class R,
class... Args>
450 template<
class C,
class R,
class... Args>
454 template<
class C,
class R,
class...
Args>
459 #pragma region CONST_VOLATILE
462 template<
class C,
class R,
class... Args>
466 template<
class C,
class R,
class... Args>
470 template<
class C,
class R,
class...
Args>
475 #pragma region CONST_VOLATILE_PARENT_REF
478 template<
class C,
class R,
class...
Args>
484 #pragma region CONST_VOLATILE_PARENT_MOVED
487 template<
class C,
class R,
class...
Args>
493 #pragma region CONST_PARENT_REF
496 template<
class C,
class R,
class...
Args>
501 #pragma region CONST_PARENT_MOVED
504 template<
class C,
class R,
class...
Args>
509 #pragma region VOLATILE
512 template<
class C,
class R,
class... Args>
516 template<
class C,
class R,
class... Args>
520 template<
class C,
class R,
class...
Args>
525 #pragma region VOLATILE_PARENT_REF
528 template<
class C,
class R,
class...
Args>
533 #pragma region VOLATILE_PARENT_MOVED
536 template<
class C,
class R,
class...
Args>
542 #pragma region PARENT_REF
545 template<
class C,
class R,
class...
Args>
550 #pragma region PARENT_MOVED
553 template<
class C,
class R,
class...
Args>
560 #pragma region TYPE_TRAITS
601 #pragma region CORE_TRAITS
623 template<
class F, size_t N>
625 template<
class F, size_t N>
632 #pragma region IS_CALLABLE
635 template<
class F,
class =
void>
#define _MSTD_HAS_CXX17
Definition config.hpp:45
#define _MSTD_CONSTEXPR17
Definition config.hpp:76
#define _MSTD_HAS_CXX20
Definition config.hpp:52
#define _MSTD_TYPENAME17
Definition config.hpp:82
Definition function_traits.hpp:23
Definition arithmetic_types.hpp:23
static _MSTD_CONSTEXPR17 const bool is_const_function_v
Definition function_traits.hpp:580
_MSTD_TYPENAME17 function_traits< F >::core_function_type core_function_type_t
Definition function_traits.hpp:605
static _MSTD_CONSTEXPR17 const bool is_free_function_v
Definition function_traits.hpp:574
_MSTD_TYPENAME17 function_traits< F >::args_tuple function_args_t
Definition function_traits.hpp:616
static _MSTD_CONSTEXPR17 const bool is_function_moved_v
Definition function_traits.hpp:568
static _MSTD_CONSTEXPR17 const bool is_std_function_v
Definition function_traits.hpp:562
_MSTD_TYPENAME17 function_traits< F >::parent_type function_parent_t
Definition function_traits.hpp:629
_MSTD_TYPENAME17 function_traits< F >::decayed_return_type function_decayed_return_t
Definition function_traits.hpp:613
static _MSTD_CONSTEXPR17 const bool is_functor_v
Definition function_traits.hpp:570
_MSTD_TYPENAME17 function_traits< F >::template decayed_arg_type< N > function_decayed_arg_t
Definition function_traits.hpp:626
static _MSTD_CONSTEXPR17 const size_t function_args_num_v
Definition function_traits.hpp:621
_MSTD_TYPENAME17 function_traits< F >::function_type function_type_t
Definition function_traits.hpp:603
static _MSTD_CONSTEXPR17 const bool is_volatile_function_v
Definition function_traits.hpp:584
_MSTD_TYPENAME17 function_traits< F >::return_type function_return_t
Definition function_traits.hpp:611
static _MSTD_CONSTEXPR17 const bool is_parent_moved_function_v
Definition function_traits.hpp:578
static _MSTD_CONSTEXPR17 const bool is_member_function_v
Definition function_traits.hpp:572
_MSTD_TYPENAME17 function_traits< F >::std_function_type as_std_function_t
Definition function_traits.hpp:608
_MSTD_CONSTEXPR17 bool is_callable_v
Definition function_traits.hpp:643
_MSTD_TYPENAME17 function_traits< F >::template arg_type< N > function_arg_t
Definition function_traits.hpp:624
static _MSTD_CONSTEXPR17 const bool is_noexcept_function_v
Definition function_traits.hpp:582
static _MSTD_CONSTEXPR17 const bool is_parent_ref_function_v
Definition function_traits.hpp:576
static _MSTD_CONSTEXPR17 const bool is_function_ptr_v
Definition function_traits.hpp:564
static _MSTD_CONSTEXPR17 const bool is_function_ref_v
Definition function_traits.hpp:566
_MSTD_TYPENAME17 function_traits< F >::decayed_args_tuple function_decayed_args_t
Definition function_traits.hpp:618
Definition function_traits.hpp:405
static _MSTD_CONSTEXPR17 const bool is_ptr
Definition function_traits.hpp:406
static _MSTD_CONSTEXPR17 const bool is_free
Definition function_traits.hpp:408
static _MSTD_CONSTEXPR17 const bool is_functor
Definition function_traits.hpp:407
Definition function_traits.hpp:357
static _MSTD_CONSTEXPR17 const bool is_ptr
Definition function_traits.hpp:358
Definition function_traits.hpp:373
static _MSTD_CONSTEXPR17 const bool is_ref
Definition function_traits.hpp:374
Definition function_traits.hpp:389
static _MSTD_CONSTEXPR17 const bool is_moved
Definition function_traits.hpp:390
Definition function_traits.hpp:106
R(Args...) function_type
Definition function_traits.hpp:107
static _MSTD_CONSTEXPR17 const bool is_parent_ref
Definition function_traits.hpp:131
static _MSTD_CONSTEXPR17 const bool is_parent_moved
Definition function_traits.hpp:139
static _MSTD_CONSTEXPR17 const bool is_const
Definition function_traits.hpp:115
static _MSTD_CONSTEXPR17 const bool is_noexcept
Definition function_traits.hpp:147
Definition function_traits.hpp:120
static _MSTD_CONSTEXPR17 const bool is_volatile
Definition function_traits.hpp:123
R(Args...) volatile function_type
Definition function_traits.hpp:121
Definition function_traits.hpp:87
R(Args...) function_type
Definition function_traits.hpp:88
Definition function_traits.hpp:417
Definition function_traits.hpp:343
R(Args...) function_type
Definition function_traits.hpp:344
static _MSTD_CONSTEXPR17 const bool is_std_function
Definition function_traits.hpp:346
static _MSTD_CONSTEXPR17 const bool is_functor
Definition function_traits.hpp:347
static _MSTD_CONSTEXPR17 const bool is_free
Definition function_traits.hpp:348
Definition function_traits.hpp:78
static _MSTD_CONSTEXPR17 const bool is_free
Definition function_traits.hpp:79
Definition function_traits.hpp:639
Definition function_traits.hpp:636
Definition function_traits.hpp:68
C parent_type
Definition function_traits.hpp:69
Definition function_traits.hpp:50
std::decay_t< R > decayed_return_type
Definition function_traits.hpp:55
R(Args...) core_function_type
Definition function_traits.hpp:51
R return_type
Definition function_traits.hpp:54
std::tuple< std::decay_t< Args >... > decayed_args_tuple
Definition function_traits.hpp:58
std::tuple< Args... > args_tuple
Definition function_traits.hpp:57
std::function< R(Args...)> std_function_type
Definition function_traits.hpp:52
static _MSTD_CONSTEXPR17 const size_t args_num
Definition function_traits.hpp:59
_MSTD_TYPENAME17 std::tuple_element_t< N, decayed_args_tuple > decayed_arg_type
Definition function_traits.hpp:64
_MSTD_TYPENAME17 std::tuple_element_t< N, args_tuple > arg_type
Definition function_traits.hpp:62
Definition function_traits.hpp:47
Definition function_traits.hpp:27
static _MSTD_CONSTEXPR17 const bool is_moved
Definition function_traits.hpp:31
static _MSTD_CONSTEXPR17 const bool is_volatile
Definition function_traits.hpp:40
static _MSTD_CONSTEXPR17 const bool is_noexcept
Definition function_traits.hpp:39
static _MSTD_CONSTEXPR17 const bool is_functor
Definition function_traits.hpp:32
static _MSTD_CONSTEXPR17 const bool is_parent_moved
Definition function_traits.hpp:37
static _MSTD_CONSTEXPR17 const bool is_const
Definition function_traits.hpp:38
static _MSTD_CONSTEXPR17 const bool is_std_function
Definition function_traits.hpp:28
static _MSTD_CONSTEXPR17 const bool is_parent_ref
Definition function_traits.hpp:36
static _MSTD_CONSTEXPR17 const bool is_member
Definition function_traits.hpp:33
static _MSTD_CONSTEXPR17 const bool is_free
Definition function_traits.hpp:34
static _MSTD_CONSTEXPR17 const bool is_ptr
Definition function_traits.hpp:29
static _MSTD_CONSTEXPR17 const bool is_ref
Definition function_traits.hpp:30