1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- // Copyright Daniel Wallin 2006. Use, modification and distribution is
- // subject to the Boost Software License, Version 1.0. (See accompanying
- // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
- #ifndef BOOST_PARAMETER_TEMPLATE_KEYWORD_060203_HPP
- # define BOOST_PARAMETER_TEMPLATE_KEYWORD_060203_HPP
- # include <boost/mpl/and.hpp>
- # include <boost/mpl/not.hpp>
- # include <boost/type_traits/is_convertible.hpp>
- # include <boost/type_traits/is_reference.hpp>
- namespace boost { namespace parameter {
- namespace aux
- {
- struct template_keyword_tag {};
- template <class T, class U>
- struct is_pointer_convertible
- : is_convertible<T*, U*>
- {};
- template <class T>
- struct is_template_keyword
- : mpl::and_<
- mpl::not_<is_reference<T> >
- , is_pointer_convertible<T, template_keyword_tag>
- >
- {};
- } // namespace aux
- template <class Tag, class T>
- struct template_keyword
- : aux::template_keyword_tag
- {
- typedef Tag key_type;
- typedef T value_type;
- typedef value_type reference;
- };
- }} // namespace boost::parameter
- #endif // BOOST_PARAMETER_TEMPLATE_KEYWORD_060203_HPP
|