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 | |
13 | namespace 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 | |
27 | namespace 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 | |
65 | namespace 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 | |