diff options
Diffstat (limited to 'boost/callable_traits/remove_member_cv.hpp')
-rw-r--r-- | boost/callable_traits/remove_member_cv.hpp | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/boost/callable_traits/remove_member_cv.hpp b/boost/callable_traits/remove_member_cv.hpp new file mode 100644 index 0000000000..30d99a0821 --- /dev/null +++ b/boost/callable_traits/remove_member_cv.hpp @@ -0,0 +1,87 @@ +/* + +@Copyright Barrett Adair 2015-2017 + +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt) + +*/ + +#ifndef BOOST_CLBL_TRTS_REMOVE_MEMBER_CV_HPP +#define BOOST_CLBL_TRTS_REMOVE_MEMBER_CV_HPP + +#include <boost/callable_traits/detail/core.hpp> + +namespace boost { namespace callable_traits { + +//[ remove_member_cv_hpp +/*` +[section:ref_remove_member_cv remove_member_cv] +[heading Header] +``#include <boost/callable_traits/remove_member_cv.hpp>`` +[heading Definition] +*/ + +template<typename T> +using remove_member_cv_t = //see below +//<- + detail::try_but_fail_if_invalid< + typename detail::traits<T>::remove_member_cv, + member_qualifiers_are_illegal_for_this_type>; + +namespace detail { + + template<typename T, typename = std::false_type> + struct remove_member_cv_impl {}; + + template<typename T> + struct remove_member_cv_impl <T, typename std::is_same< + remove_member_cv_t<T>, detail::dummy>::type> + { + using type = remove_member_cv_t<T>; + }; +} + +//-> + +template<typename T> +struct remove_member_cv : detail::remove_member_cv_impl<T> {}; + +//<- +}} // namespace boost::callable_traits +//-> + +/*` +[heading Constraints] +* `T` must be a function type or a member function pointer type +* If `T` is a pointer, it may not be cv/ref qualified + +[heading Behavior] +* A substitution failure occurs if the constraints are violated. +* Removes member `const` and/or `volatile` qualifiers from `T`, if present. + +[heading Input/Output Examples] +[table + [[`T`] [`remove_member_cv_t<T>`]] + [[`int() const volatile`] [`int()`]] + [[`int(foo::*)() const volatile`] [`int(foo::*)()`]] + [[`int(foo::*)() volatile`] [`int(foo::*)()`]] + [[`int(foo::*)() const`] [`int(foo::*)()`]] + [[`int(foo::*)() const &`] [`int(foo::*)() &`]] + [[`int(foo::*)() const &&`] [`int(foo::*)() &&`]] + [[`int(foo::*)() const`] [`int(foo::*)()`]] + [[`int`] [(substitution failure)]] + [[`int (&)()`] [(substitution failure)]] + [[`int (*)()`] [(substitution failure)]] + [[`int foo::*`] [(substitution failure)]] + [[`int (foo::* const)()`] [(substitution failure)]] +] + +[heading Example Program] +[import ../example/remove_member_cv.cpp] +[remove_member_cv] +[endsect] +*/ +//] + +#endif // #ifndef BOOST_CLBL_TRTS_REMOVE_MEMBER_CV_HPP |