Chris@101: // Copyright Kevlin Henney, 2000-2005. Chris@101: // Copyright Alexander Nasonov, 2006-2010. Chris@101: // Copyright Antony Polukhin, 2011-2014. Chris@16: // Chris@101: // Distributed under the Boost Software License, Version 1.0. (See Chris@101: // accompanying file LICENSE_1_0.txt or copy at Chris@101: // http://www.boost.org/LICENSE_1_0.txt) Chris@16: // Chris@16: // what: lexical_cast custom keyword cast Chris@16: // who: contributed by Kevlin Henney, Chris@16: // enhanced with contributions from Terje Slettebo, Chris@16: // with additional fixes and suggestions from Gennaro Prota, Chris@16: // Beman Dawes, Dave Abrahams, Daryle Walker, Peter Dimov, Chris@16: // Alexander Nasonov, Antony Polukhin, Justin Viiret, Michael Hofmann, Chris@16: // Cheng Yang, Matthew Bradbury, David W. Birdsall, Pavel Korzh and other Boosters Chris@101: // when: November 2000, March 2003, June 2005, June 2006, March 2011 - 2014 Chris@101: Chris@101: #ifndef BOOST_LEXICAL_CAST_INCLUDED Chris@101: #define BOOST_LEXICAL_CAST_INCLUDED Chris@16: Chris@16: #include Chris@101: #ifdef BOOST_HAS_PRAGMA_ONCE Chris@101: # pragma once Chris@101: #endif Chris@101: Chris@16: #if defined(BOOST_NO_STRINGSTREAM) || defined(BOOST_NO_STD_WSTRING) Chris@16: #define BOOST_LCAST_NO_WCHAR_T Chris@16: #endif Chris@16: Chris@101: #include Chris@101: #include Chris@101: #include Chris@16: Chris@101: namespace boost Chris@16: { Chris@16: template Chris@16: inline Target lexical_cast(const Source &arg) Chris@16: { Chris@101: Target result; Chris@16: Chris@101: if (!boost::conversion::detail::try_lexical_convert(arg, result)) { Chris@101: boost::conversion::detail::throw_bad_cast(); Chris@101: } Chris@16: Chris@101: return result; Chris@16: } Chris@16: Chris@16: template Chris@16: inline Target lexical_cast(const char* chars, std::size_t count) Chris@101: { Chris@16: return ::boost::lexical_cast( Chris@16: ::boost::iterator_range(chars, chars + count) Chris@16: ); Chris@16: } Chris@16: Chris@16: template Chris@16: inline Target lexical_cast(const unsigned char* chars, std::size_t count) Chris@16: { Chris@101: return ::boost::lexical_cast( Chris@16: ::boost::iterator_range(chars, chars + count) Chris@101: ); Chris@101: } Chris@16: Chris@16: template Chris@16: inline Target lexical_cast(const signed char* chars, std::size_t count) Chris@16: { Chris@16: return ::boost::lexical_cast( Chris@16: ::boost::iterator_range(chars, chars + count) Chris@16: ); Chris@16: } Chris@16: Chris@16: #ifndef BOOST_LCAST_NO_WCHAR_T Chris@16: template Chris@16: inline Target lexical_cast(const wchar_t* chars, std::size_t count) Chris@16: { Chris@16: return ::boost::lexical_cast( Chris@16: ::boost::iterator_range(chars, chars + count) Chris@16: ); Chris@16: } Chris@16: #endif Chris@16: #ifndef BOOST_NO_CXX11_CHAR16_T Chris@16: template Chris@16: inline Target lexical_cast(const char16_t* chars, std::size_t count) Chris@16: { Chris@16: return ::boost::lexical_cast( Chris@16: ::boost::iterator_range(chars, chars + count) Chris@16: ); Chris@16: } Chris@16: #endif Chris@16: #ifndef BOOST_NO_CXX11_CHAR32_T Chris@16: template Chris@16: inline Target lexical_cast(const char32_t* chars, std::size_t count) Chris@16: { Chris@16: return ::boost::lexical_cast( Chris@16: ::boost::iterator_range(chars, chars + count) Chris@16: ); Chris@16: } Chris@16: #endif Chris@16: Chris@16: } // namespace boost Chris@16: Chris@16: #undef BOOST_LCAST_NO_WCHAR_T Chris@16: Chris@16: #endif // BOOST_LEXICAL_CAST_INCLUDED Chris@16: