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 UUID_7E48761AD92811DC9011477D56D89593 |
7 | #define UUID_7E48761AD92811DC9011477D56D89593 |
8 | #if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) |
9 | #pragma GCC system_header |
10 | #endif |
11 | #if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) |
12 | #pragma warning(push,1) |
13 | #endif |
14 | |
15 | #include <boost/utility/enable_if.hpp> |
16 | #include <boost/exception/detail/is_output_streamable.hpp> |
17 | #include <sstream> |
18 | |
19 | namespace |
20 | boost |
21 | { |
22 | template <class T,class U> |
23 | std::string to_string( std::pair<T,U> const & ); |
24 | std::string to_string( std::exception const & ); |
25 | |
26 | namespace |
27 | to_string_detail |
28 | { |
29 | template <class T> |
30 | typename disable_if<is_output_streamable<T>,char>::type to_string( T const & ); |
31 | using boost::to_string; |
32 | |
33 | template <class,bool IsOutputStreamable> |
34 | struct has_to_string_impl; |
35 | |
36 | template <class T> |
37 | struct |
38 | has_to_string_impl<T,true> |
39 | { |
40 | enum e { value=1 }; |
41 | }; |
42 | |
43 | template <class T> |
44 | struct |
45 | has_to_string_impl<T,false> |
46 | { |
47 | static T const & f(); |
48 | enum e { value=1!=sizeof(to_string(f())) }; |
49 | }; |
50 | } |
51 | |
52 | template <class T> |
53 | inline |
54 | typename enable_if<is_output_streamable<T>,std::string>::type |
55 | to_string( T const & x ) |
56 | { |
57 | std::ostringstream out; |
58 | out << x; |
59 | return out.str(); |
60 | } |
61 | |
62 | template <class T> |
63 | struct |
64 | has_to_string |
65 | { |
66 | enum e { value=to_string_detail::has_to_string_impl<T,is_output_streamable<T>::value>::value }; |
67 | }; |
68 | |
69 | template <class T,class U> |
70 | inline |
71 | std::string |
72 | to_string( std::pair<T,U> const & x ) |
73 | { |
74 | return std::string("(" ) + to_string(x.first) + ',' + to_string(x.second) + ')'; |
75 | } |
76 | |
77 | inline |
78 | std::string |
79 | to_string( std::exception const & x ) |
80 | { |
81 | return x.what(); |
82 | } |
83 | } |
84 | |
85 | #if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) |
86 | #pragma warning(pop) |
87 | #endif |
88 | #endif |
89 | |