• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.
2 
3 //Distributed under the Boost Software License, Version 1.0. (See accompanying
4 //file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
5 
6 #ifndef BOOST_EXCEPTION_63EE924290FB11DC87BB856555D89593
7 #define BOOST_EXCEPTION_63EE924290FB11DC87BB856555D89593
8 
9 #include <boost/exception/info.hpp>
10 #include <boost/tuple/tuple.hpp>
11 
12 #ifndef BOOST_EXCEPTION_ENABLE_WARNINGS
13 #if __GNUC__*100+__GNUC_MINOR__>301
14 #pragma GCC system_header
15 #endif
16 #ifdef __clang__
17 #pragma clang system_header
18 #endif
19 #ifdef _MSC_VER
20 #pragma warning(push,1)
21 #endif
22 #endif
23 
24 namespace
25 boost
26     {
27     template <
28         class E >
29     inline
30     E const &
operator <<(E const & x,tuple<> const & v)31     operator<<(
32         E const & x,
33         tuple< > const & v )
34         {
35         return x;
36         }
37 
38     template <
39         class E,
40         class Tag1,class T1 >
41     inline
42     E const &
operator <<(E const & x,tuple<error_info<Tag1,T1>> const & v)43     operator<<(
44         E const & x,
45         tuple<
46             error_info<Tag1,T1> > const & v )
47         {
48         return x << v.template get<0>();
49         }
50 
51     template <
52         class E,
53         class Tag1,class T1,
54         class Tag2,class T2 >
55     inline
56     E const &
operator <<(E const & x,tuple<error_info<Tag1,T1>,error_info<Tag2,T2>> const & v)57     operator<<(
58         E const & x,
59         tuple<
60             error_info<Tag1,T1>,
61             error_info<Tag2,T2> > const & v )
62         {
63         return x << v.template get<0>() << v.template get<1>();
64         }
65 
66     template <
67         class E,
68         class Tag1,class T1,
69         class Tag2,class T2,
70         class Tag3,class T3 >
71     inline
72     E const &
operator <<(E const & x,tuple<error_info<Tag1,T1>,error_info<Tag2,T2>,error_info<Tag3,T3>> const & v)73     operator<<(
74         E const & x,
75         tuple<
76             error_info<Tag1,T1>,
77             error_info<Tag2,T2>,
78             error_info<Tag3,T3> > const & v )
79         {
80         return x << v.template get<0>() << v.template get<1>() << v.template get<2>();
81         }
82 
83     template <
84         class E,
85         class Tag1,class T1,
86         class Tag2,class T2,
87         class Tag3,class T3,
88         class Tag4,class T4 >
89     inline
90     E const &
operator <<(E const & x,tuple<error_info<Tag1,T1>,error_info<Tag2,T2>,error_info<Tag3,T3>,error_info<Tag4,T4>> const & v)91     operator<<(
92         E const & x,
93         tuple<
94             error_info<Tag1,T1>,
95             error_info<Tag2,T2>,
96             error_info<Tag3,T3>,
97             error_info<Tag4,T4> > const & v )
98         {
99         return x << v.template get<0>() << v.template get<1>() << v.template get<2>() << v.template get<3>();
100         }
101     }
102 
103 #if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
104 #pragma warning(pop)
105 #endif
106 #endif
107