From 6c4d9b550bdb8d8565d58e300edcbf3143e90cc1 Mon Sep 17 00:00:00 2001 From: Beman Dawes Date: Sat, 6 Jan 2001 16:39:40 +0000 Subject: [PATCH] Initial commit after public review (note change in library name per review) [SVN r8515] --- include/boost/lexical_cast.hpp | 67 ++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 include/boost/lexical_cast.hpp diff --git a/include/boost/lexical_cast.hpp b/include/boost/lexical_cast.hpp new file mode 100644 index 0000000..5096e1b --- /dev/null +++ b/include/boost/lexical_cast.hpp @@ -0,0 +1,67 @@ +// boost lexical_cast.hpp header -------------------------------------------// + +// See http://www.boost.org for most recent version including documentation. + +#ifndef BOOST_LEXICAL_CAST_INCLUDED +#define BOOST_LEXICAL_CAST_INCLUDED + +// what: lexical_cast custom keyword cast +// who: contributed by Kevlin Henney, with alternative naming, behaviors +// and fixes contributed by Dave Abrahams, Daryle Walker and other +// Boosters on the list +// when: November 2000 +// where: tested with MSVC 6.0, BCC 5.5, and g++ 2.91 + +#include +# ifndef BOOST_NO_STRINGSTREAM +# include +# else +# include +# endif +#include + +namespace boost +{ + // exception used to indicate runtime lexical_cast failure + class bad_lexical_cast : public std::bad_cast + { + public: + // constructors, destructors, and assignment operator defaulted + + // function inlined for brevity and consistency with rest of library + virtual const char * what() const throw() + { + return "bad lexical cast: " + "source type value could not be interpreted as target"; + } + }; + + template + Target lexical_cast(Source arg) + { +# ifndef BOOST_NO_STRINGSTREAM + std::stringstream interpreter; +# else + std::strstream interpreter; // for out-of-the-box g++ 2.95.2 +# endif + Target result; + + if(!(interpreter << arg) || !(interpreter >> result) || + !(interpreter >> std::ws).eof()) + throw bad_lexical_cast(); + + return result; + } +} + +// Copyright Kevlin Henney, 2000. All rights reserved. +// +// Permission to use, copy, modify, and distribute this software for any +// purpose is hereby granted without fee, provided that this copyright and +// permissions notice appear in all copies and derivatives, and that no +// charge may be made for the software and its documentation except to cover +// cost of distribution. +// +// This software is provided "as is" without express or implied warranty. + +#endif