1/*=============================================================================
2 Copyright (c) 2001-2011 Joel de Guzman
3
4 Distributed under the Boost Software License, Version 1.0. (See accompanying
5 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6==============================================================================*/
7#if !defined(BOOST_FUSION_TAG_OF_09262006_1900)
8#define BOOST_FUSION_TAG_OF_09262006_1900
9
10#include <boost/fusion/support/config.hpp>
11#include <boost/fusion/support/tag_of_fwd.hpp>
12
13namespace boost { namespace tuples
14{
15 struct null_type;
16
17 template <
18 class T0, class T1, class T2, class T3, class T4,
19 class T5, class T6, class T7, class T8, class T9
20 >
21 class tuple;
22
23 template <class Head, class Tail>
24 struct cons;
25}}
26
27namespace boost { namespace fusion
28{
29 struct boost_tuple_tag;
30 struct fusion_sequence_tag;
31
32 namespace traits
33 {
34 template <
35 class T0, class T1, class T2, class T3, class T4,
36 class T5, class T6, class T7, class T8, class T9
37 >
38#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
39 struct tag_of<tuples::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>, void >
40#else
41 struct tag_of<tuples::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> >
42#endif
43 {
44 typedef boost_tuple_tag type;
45 };
46
47 template <class Head, class Tail>
48#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
49 struct tag_of<tuples::cons<Head, Tail>, void >
50#else
51 struct tag_of<tuples::cons<Head, Tail> >
52#endif
53 {
54 typedef boost_tuple_tag type;
55 };
56
57 template <>
58 struct tag_of<tuples::null_type>
59 {
60 typedef boost_tuple_tag type;
61 };
62 }
63}}
64
65namespace boost { namespace mpl
66{
67 template<typename>
68 struct sequence_tag;
69
70 template <
71 class T0, class T1, class T2, class T3, class T4,
72 class T5, class T6, class T7, class T8, class T9
73 >
74 struct sequence_tag<tuples::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> >
75 {
76 typedef fusion::fusion_sequence_tag type;
77 };
78
79 template <
80 class T0, class T1, class T2, class T3, class T4,
81 class T5, class T6, class T7, class T8, class T9
82 >
83 struct sequence_tag<
84 tuples::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> const
85 >
86 {
87 typedef fusion::fusion_sequence_tag type;
88 };
89
90 template <class Head, class Tail>
91 struct sequence_tag<tuples::cons<Head, Tail> >
92 {
93 typedef fusion::fusion_sequence_tag type;
94 };
95
96 template <class Head, class Tail>
97 struct sequence_tag<tuples::cons<Head, Tail> const>
98 {
99 typedef fusion::fusion_sequence_tag type;
100 };
101
102 template <>
103 struct sequence_tag<tuples::null_type>
104 {
105 typedef fusion::fusion_sequence_tag type;
106 };
107
108 template <>
109 struct sequence_tag<tuples::null_type const>
110 {
111 typedef fusion::fusion_sequence_tag type;
112 };
113}}
114
115#endif
116

source code of boost/boost/fusion/adapted/boost_tuple/tag_of.hpp