1 /* ///////////////////////////////////////////////////////////////////////
7 * Brief: add cv-qualified traits
10 * Copyright (c) 2008-2020, Waruqi All rights reserved.
11 * //////////////////////////////////////////////////////////////////// */
13 #ifndef EXTL_TYPE_TRAITS_ADD_CV_H
14 #define EXTL_TYPE_TRAITS_ADD_CV_H
16 #ifndef EXTL_TYPE_TRAITS_ADD_CV_SUPPORT
17 # error extl::add_cv is not supported by current compiler.
19 /* ///////////////////////////////////////////////////////////////////////
24 #ifdef EXTL_TYPE_TRAITS_IS_REF_SUPPORT
28 #ifdef EXTL_TYPE_TRAITS_TEST_ENABLE
29 # ifdef EXTL_TYPE_TRAITS_IS_CV_SUPPORT
34 /* ///////////////////////////////////////////////////////////////////////
37 #define EXTL_ADD_CV(src_type) EXTL_MODIFY_TYPE(add_cv, src_type)
39 /* ///////////////////////////////////////////////////////////////////////
44 #ifdef EXTL_TYPE_TRAITS_SUPPORT
45 /* //////////////////////////////////////////////////////////////////// */
46 # ifdef EXTL_TEMPLATE_PARTIAL_SPEC_SUPPORT
47 EXTL_TYPE_TRAIT_DEF_1(add_cv
, T
const volatile)
49 // note: Cannot add cv-qualified if T is reference
50 EXTL_TYPE_TRAIT_PARTIAL_SPEC_1_1(typename_param_k T
, add_cv
, T
&, T
&)
52 template < e_bool_t is_ref
>
55 template < typename_param_k T
>
62 EXTL_TEMPLATE_SPECIALISATION
63 struct add_cv_helper
< e_false_v
>
65 template < typename_param_k T
>
68 typedef T
const volatile type
;
72 template < typename_param_k T
>
74 : add_cv_helper
< (is_ref
<T
>::value
) >::template_qual_k result
<T
>
78 EXTL_TYPE_TRAIT_DEF_1(add_cv
, typename_type_k add_cv_impl
<T
>::type
)
82 /* ///////////////////////////////////////////////////////////////////////
85 # ifdef EXTL_TYPE_TRAITS_TEST_ENABLE
86 # include "unit_test/add_cv_test.h"
90 /* ///////////////////////////////////////////////////////////////////////
95 /* //////////////////////////////////////////////////////////////////// */
96 #endif /* EXTL_TYPE_TRAITS_ADD_CV_H */
97 /* //////////////////////////////////////////////////////////////////// */