48 lines
1.1 KiB
C++
48 lines
1.1 KiB
C++
// 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
|
|
|