1 // Copyright (c) 2009-2016 Vladimir Batov.
2 // Use, modification and distribution are subject to the Boost Software License,
3 // Version 1.0. See http://www.boost.org/LICENSE_1_0.txt.
5 #ifndef BOOST_PARAMETER_EXT_PRIVATE_HPP
6 #define BOOST_PARAMETER_EXT_PRIVATE_HPP
8 #include <boost/parameter/keyword.hpp>
10 // A Boost.Parameter extension by Andrey Semashev.
11 // This should really go to Boost.Parameter in the end.
13 namespace boost { namespace parameter {
15 // The metafunction, given the type of the arguments pack and the keyword tag,
16 // returns the corresponding parameter type
17 template< typename ArgsT, typename KeywordTagT >
23 template< typename ArgT, typename KeywordTagT >
24 struct parameter_type<aux::tagged_argument<KeywordTagT, ArgT>, KeywordTagT>
26 typedef typename aux::tagged_argument< KeywordTagT, ArgT >::value_type type;
29 template< typename KeywordTagT1, typename ArgT, typename KeywordTagT2 >
30 struct parameter_type< aux::tagged_argument< KeywordTagT1, ArgT >, KeywordTagT2 >
35 template< typename ArgT, typename TailT, typename KeywordTagT >
36 struct parameter_type<
38 aux::tagged_argument< KeywordTagT, ArgT >,
44 typedef typename aux::tagged_argument< KeywordTagT, ArgT >::value_type type;
47 template< typename KeywordTagT1, typename ArgT, typename TailT, typename KeywordTagT2 >
48 struct parameter_type<
50 aux::tagged_argument< KeywordTagT1, ArgT >,
55 public parameter_type< TailT, KeywordTagT2 >
59 }} // boost::parameter
61 #endif // BOOST_PARAMETER_EXT_PRIVATE_HPP