remove \r
[extl.git] / extl / type / traits / is_func.h
blobddf24343653ac320b17c1e46021b65bd1bfeb631
1 /* ///////////////////////////////////////////////////////////////////////
2 * File: is_func.h
4 * Created: 08.02.07
5 * Updated: 08.07.09
7 * Brief: is_func traits
9 * [<Home>]
10 * Copyright (c) 2008-2020, Waruqi All rights reserved.
11 * //////////////////////////////////////////////////////////////////// */
12 #ifndef EXTL_TYPE_TRAITS_IS_FUNC_H
13 #define EXTL_TYPE_TRAITS_IS_FUNC_H
15 #ifndef EXTL_TYPE_TRAITS_IS_FUNC_SUPPORT
16 # error extl::is_func is not supported by current compiler.
17 #endif
19 /* ///////////////////////////////////////////////////////////////////////
20 * Includes
22 #include "prefix.h"
24 #ifdef EXTL_TYPE_TRAITS_IS_FUNC_PTR_SUPPORT
25 # include "is_func_ptr.h"
26 #endif
28 /* ///////////////////////////////////////////////////////////////////////
29 * Macros
31 #define EXTL_MUST_BE_FUNC(type) EXTL_MUST_BE_(is_func, type)
32 #define EXTL_MUST_BE_CV_FUNC(type) EXTL_MUST_BE_CV_(is_func, type)
34 #define EXTL_MUST_NOT_BE_FUNC(type) EXTL_MUST_NOT_BE_(is_func, type)
35 #define EXTL_MUST_NOT_BE_CV_FUNC(type) EXTL_MUST_NOT_BE_CV_(is_func, type)
36 /* ///////////////////////////////////////////////////////////////////////
37 * ::extl namespace
39 EXTL_BEGIN_NAMESPACE
41 #ifdef EXTL_TYPE_TRAITS_SUPPORT
42 /* //////////////////////////////////////////////////////////////////// */
44 # ifdef EXTL_TEMPLATE_PARTIAL_SPEC_SUPPORT
45 EXTL_BOOL_TRAIT_DEF_1(is_func, is_func_ptr<T*>::value)
46 /* exclude reference type */
47 EXTL_BOOL_TRAIT_PARTIAL_SPEC_1_1(typename_param_k T, is_func, T&, e_false_v)
48 # else
50 char EXTL_CDECL is_func_helper1(...);
51 template <typename_param_k T>
52 T(* is_func_helper1(type_wrap<T>))[1];
54 yes_type EXTL_CDECL is_func_helper2(...);
55 template <typename_param_k T>
56 no_type is_func_helper2(T (*)[1]); /* exclude function type */
58 EXTL_BOOL_TRAIT_DEF_1(is_func, sizeof(is_func_helper2(is_func_helper1(type_wrap<T>()))) == sizeof(yes_type))
60 EXTL_BOOL_TRAIT_SPEC_1(is_func, void, e_false_v)
61 # ifdef EXTL_CV_VOID_SPEC_SUPPORT
62 EXTL_BOOL_TRAIT_SPEC_1(is_func, void const, e_false_v)
63 EXTL_BOOL_TRAIT_SPEC_1(is_func, void volatile, e_false_v)
64 EXTL_BOOL_TRAIT_SPEC_1(is_func, void const volatile, e_false_v)
65 # endif
67 # endif
69 /* ///////////////////////////////////////////////////////////////////////
70 * Unit-testing
72 # ifdef EXTL_TYPE_TRAITS_TEST_ENABLE
73 # include "unit_test/is_func_test.h"
74 # endif
75 #endif /* EXTL_TYPE_TRAITS_SUPPORT */
77 /* ///////////////////////////////////////////////////////////////////////
78 * ::extl namespace
80 EXTL_END_NAMESPACE
82 /* //////////////////////////////////////////////////////////////////// */
83 #endif /* EXTL_TYPE_TRAITS_IS_FUNC_H */
84 /* //////////////////////////////////////////////////////////////////// */