// 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 | |