1 /* ///////////////////////////////////////////////////////////////////////
7 * Brief: add pointer traits
10 * Copyright (c) 2008-2020, Waruqi All rights reserved.
11 * //////////////////////////////////////////////////////////////////// */
12 #ifndef EXTL_TYPE_TRAITS_ADD_PTR_H
13 #define EXTL_TYPE_TRAITS_ADD_PTR_H
15 /* ///////////////////////////////////////////////////////////////////////
20 #ifdef EXTL_TYPE_TRAITS_IS_REF_SUPPORT
24 #ifdef EXTL_TYPE_TRAITS_REMOVE_REF_SUPPORT
25 # include "remove_ref.h"
28 #ifdef EXTL_TYPE_TRAITS_TEST_ENABLE
29 # ifdef EXTL_TYPE_TRAITS_IS_PTR_SUPPORT
34 /* ///////////////////////////////////////////////////////////////////////
37 #define EXTL_ADD_PTR(src_type) EXTL_MODIFY_TYPE(add_ptr, src_type)
39 /* ///////////////////////////////////////////////////////////////////////
44 #ifdef EXTL_TYPE_TRAITS_SUPPORT
46 # ifdef EXTL_TYPE_TRAITS_REMOVE_REF_SUPPORT
47 EXTL_TYPE_TRAIT_DEF_1(add_ptr
, typename_type_k remove_ref
<T
>::type
*)
50 template < e_bool_t is_ref
>
53 template < typename_param_k T
>
60 EXTL_TEMPLATE_SPECIALISATION
61 struct add_ptr_helper
< e_false_v
>
63 template < typename_param_k T
>
70 template < typename_param_k T
>
72 : add_ptr_helper
< (is_ref
<T
>::value
) >::template_qual_k result
<T
>
77 EXTL_TYPE_TRAIT_DEF_1(add_ptr
, typename_type_k add_ptr_impl
<T
>::type
)
81 /* ///////////////////////////////////////////////////////////////////////
84 # ifdef EXTL_TYPE_TRAITS_TEST_ENABLE
85 # include "unit_test/add_ptr_test.h"
90 /* ///////////////////////////////////////////////////////////////////////
95 /* //////////////////////////////////////////////////////////////////// */
96 #endif /* EXTL_TYPE_TRAITS_ADD_PTR_H */
97 /* //////////////////////////////////////////////////////////////////// */