remove_member_cv.hpp
Go to the documentation of this file.
1 /*
2 
3 @Copyright Barrett Adair 2015-2017
4 
5 Distributed under the Boost Software License, Version 1.0.
6 (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
7 
8 */
9 
10 #ifndef BOOST_CLBL_TRTS_REMOVE_MEMBER_CV_HPP
11 #define BOOST_CLBL_TRTS_REMOVE_MEMBER_CV_HPP
12 
14 
15 namespace boost { namespace callable_traits {
16 
17 //[ remove_member_cv_hpp
18 /*`
19 [section:ref_remove_member_cv remove_member_cv]
20 [heading Header]
21 ``#include <boost/callable_traits/remove_member_cv.hpp>``
22 [heading Definition]
23 */
24 
25 template<typename T>
26 using remove_member_cv_t = //see below
27 //<-
30  member_qualifiers_are_illegal_for_this_type>;
31 
32 namespace detail {
33 
34  template<typename T, typename = std::false_type>
36 
37  template<typename T>
38  struct remove_member_cv_impl <T, typename std::is_same<
39  remove_member_cv_t<T>, detail::dummy>::type>
40  {
42  };
43 }
44 
45 //->
46 
47 template<typename T>
49 
50 //<-
51 }} // namespace boost::callable_traits
52 //->
53 
54 /*`
55 [heading Constraints]
56 * `T` must be a function type or a member function pointer type
57 * If `T` is a pointer, it may not be cv/ref qualified
58 
59 [heading Behavior]
60 * A substitution failure occurs if the constraints are violated.
61 * Removes member `const` and/or `volatile` qualifiers from `T`, if present.
62 
63 [heading Input/Output Examples]
64 [table
65  [[`T`] [`remove_member_cv_t<T>`]]
66  [[`int() const volatile`] [`int()`]]
67  [[`int(foo::*)() const volatile`] [`int(foo::*)()`]]
68  [[`int(foo::*)() volatile`] [`int(foo::*)()`]]
69  [[`int(foo::*)() const`] [`int(foo::*)()`]]
70  [[`int(foo::*)() const &`] [`int(foo::*)() &`]]
71  [[`int(foo::*)() const &&`] [`int(foo::*)() &&`]]
72  [[`int(foo::*)() const`] [`int(foo::*)()`]]
73  [[`int`] [(substitution failure)]]
74  [[`int (&)()`] [(substitution failure)]]
75  [[`int (*)()`] [(substitution failure)]]
76  [[`int foo::*`] [(substitution failure)]]
77  [[`int (foo::* const)()`] [(substitution failure)]]
78 ]
79 
80 [heading Example Program]
81 [import ../example/remove_member_cv.cpp]
82 [remove_member_cv]
83 [endsect]
84 */
85 //]
86 
87 #endif // #ifndef BOOST_CLBL_TRTS_REMOVE_MEMBER_CV_HPP
sfinae_try< T, fail_when_same< U, invalid_type, ErrorType >, fail_when_same< U, reference_error, reference_type_not_supported_by_this_metafunction > > try_but_fail_if_invalid
Definition: utility.hpp:58
typename BOOST_CLBL_TRTS_DISJUNCTION(function_object< unwrap_reference< T > >, function< T >, pmf< T >, pmd< T >, default_callable_traits< T >)::traits traits
Definition: traits.hpp:25
detail::try_but_fail_if_invalid< typename detail::traits< T >::remove_member_cv, member_qualifiers_are_illegal_for_this_type > remove_member_cv_t