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
19namespace
20boost
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

source code of boost/boost/exception/to_string.hpp