Files
boost_exception/include/boost/exception/to_string.hpp

59 lines
1.4 KiB
C++
Raw Normal View History

2008-03-04 01:41:17 +00:00
//Copyright (c) 2006-2008 Emil Dotchevski and Reverge Studios, Inc.
//Distributed under the Boost Software License, Version 1.0. (See accompanying
//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
#ifndef UUID_7E48761AD92811DC9011477D56D89593
#define UUID_7E48761AD92811DC9011477D56D89593
2008-04-11 03:51:06 +00:00
#include <boost/utility/enable_if.hpp>
#include <boost/exception/detail/is_output_streamable.hpp>
2008-03-04 01:41:17 +00:00
#include <sstream>
namespace
boost
{
namespace
to_string_detail
{
2008-04-11 18:34:46 +00:00
template <class T>
typename disable_if<is_output_streamable<T>,char>::type to_string( T const & );
2008-04-11 03:51:06 +00:00
template <class,bool IsOutputStreamable>
2008-04-11 18:34:46 +00:00
struct has_to_string_impl;
2008-04-11 03:51:06 +00:00
template <class T>
2008-04-11 18:34:46 +00:00
struct
has_to_string_impl<T,true>
{
enum e { value=1 };
};
2008-04-11 03:51:06 +00:00
template <class T>
2008-04-11 03:51:06 +00:00
struct
has_to_string_impl<T,false>
{
2008-04-14 17:31:38 +00:00
static T const & f();
enum e { value=1!=sizeof(to_string(f())) };
};
}
template <class T>
typename enable_if<is_output_streamable<T>,std::string>::type
to_string( T const & x )
{
std::ostringstream out;
out << x;
return out.str();
}
template <class T>
2008-04-11 03:51:06 +00:00
struct
has_to_string
{
enum e { value=to_string_detail::has_to_string_impl<T,is_output_streamable<T>::value>::value };
};
}
2008-03-04 01:41:17 +00:00
#endif