]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | // Copyright Daniel Wallin 2006. Use, modification and distribution is |
2 | // subject to the Boost Software License, Version 1.0. (See accompanying | |
3 | // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | |
4 | ||
5 | #ifndef BOOST_PARAMETER_TEMPLATE_KEYWORD_060203_HPP | |
6 | # define BOOST_PARAMETER_TEMPLATE_KEYWORD_060203_HPP | |
7 | ||
8 | # include <boost/mpl/and.hpp> | |
9 | # include <boost/mpl/not.hpp> | |
10 | # include <boost/type_traits/is_convertible.hpp> | |
11 | # include <boost/type_traits/is_reference.hpp> | |
12 | ||
13 | namespace boost { namespace parameter { | |
14 | ||
15 | namespace aux | |
16 | { | |
17 | ||
18 | struct template_keyword_tag {}; | |
19 | ||
20 | template <class T, class U> | |
21 | struct is_pointer_convertible | |
22 | : is_convertible<T*, U*> | |
23 | {}; | |
24 | ||
25 | template <class T> | |
26 | struct is_template_keyword | |
27 | : mpl::and_< | |
28 | mpl::not_<is_reference<T> > | |
29 | , is_pointer_convertible<T, template_keyword_tag> | |
30 | > | |
31 | {}; | |
32 | ||
33 | } // namespace aux | |
34 | ||
35 | template <class Tag, class T> | |
36 | struct template_keyword | |
37 | : aux::template_keyword_tag | |
38 | { | |
39 | typedef Tag key_type; | |
40 | typedef T value_type; | |
41 | typedef value_type reference; | |
42 | }; | |
43 | ||
44 | }} // namespace boost::parameter | |
45 | ||
46 | #endif // BOOST_PARAMETER_TEMPLATE_KEYWORD_060203_HPP | |
47 |