1// Copyright Kevlin Henney, 2000-2005.
2// Copyright Alexander Nasonov, 2006-2010.
3// Copyright Antony Polukhin, 2011-2024.
4//
5// Distributed under the Boost Software License, Version 1.0. (See
6// accompanying file LICENSE_1_0.txt or copy at
7// http://www.boost.org/LICENSE_1_0.txt)
8//
9// what: lexical_cast custom keyword cast
10// who: contributed by Kevlin Henney,
11// enhanced with contributions from Terje Slettebo,
12// with additional fixes and suggestions from Gennaro Prota,
13// Beman Dawes, Dave Abrahams, Daryle Walker, Peter Dimov,
14// Alexander Nasonov, Antony Polukhin, Justin Viiret, Michael Hofmann,
15// Cheng Yang, Matthew Bradbury, David W. Birdsall, Pavel Korzh and other Boosters
16// when: November 2000, March 2003, June 2005, June 2006, March 2011 - 2014
17
18#ifndef BOOST_LEXICAL_CAST_INCLUDED
19#define BOOST_LEXICAL_CAST_INCLUDED
20
21#include <boost/config.hpp>
22#ifdef BOOST_HAS_PRAGMA_ONCE
23# pragma once
24#endif
25
26#if defined(BOOST_NO_STRINGSTREAM) || defined(BOOST_NO_STD_WSTRING)
27#define BOOST_LCAST_NO_WCHAR_T
28#endif
29
30#include <boost/lexical_cast/detail/buffer_view.hpp>
31
32#include <boost/lexical_cast/bad_lexical_cast.hpp>
33#include <boost/lexical_cast/try_lexical_convert.hpp>
34
35namespace boost
36{
37 template <typename Target, typename Source>
38 inline Target lexical_cast(const Source &arg)
39 {
40 Target result = Target();
41
42 if (!boost::conversion::detail::try_lexical_convert(arg, result)) {
43 boost::conversion::detail::throw_bad_cast<Source, Target>();
44 }
45
46 return result;
47 }
48
49 template <typename Target>
50 inline Target lexical_cast(const char* chars, std::size_t count)
51 {
52 return ::boost::lexical_cast<Target>(
53 ::boost::conversion::detail::make_buffer_view(begin: chars, end: chars + count)
54 );
55 }
56
57 template <typename Target>
58 inline Target lexical_cast(const unsigned char* chars, std::size_t count)
59 {
60 return ::boost::lexical_cast<Target>(
61 ::boost::conversion::detail::make_buffer_view(begin: chars, end: chars + count)
62 );
63 }
64
65 template <typename Target>
66 inline Target lexical_cast(const signed char* chars, std::size_t count)
67 {
68 return ::boost::lexical_cast<Target>(
69 ::boost::conversion::detail::make_buffer_view(begin: chars, end: chars + count)
70 );
71 }
72
73#ifndef BOOST_LCAST_NO_WCHAR_T
74 template <typename Target>
75 inline Target lexical_cast(const wchar_t* chars, std::size_t count)
76 {
77 return ::boost::lexical_cast<Target>(
78 ::boost::conversion::detail::make_buffer_view(begin: chars, end: chars + count)
79 );
80 }
81#endif
82 template <typename Target>
83 inline Target lexical_cast(const char16_t* chars, std::size_t count)
84 {
85 return ::boost::lexical_cast<Target>(
86 ::boost::conversion::detail::make_buffer_view(begin: chars, end: chars + count)
87 );
88 }
89 template <typename Target>
90 inline Target lexical_cast(const char32_t* chars, std::size_t count)
91 {
92 return ::boost::lexical_cast<Target>(
93 ::boost::conversion::detail::make_buffer_view(begin: chars, end: chars + count)
94 );
95 }
96
97} // namespace boost
98
99#undef BOOST_LCAST_NO_WCHAR_T
100
101#endif // BOOST_LEXICAL_CAST_INCLUDED
102
103

source code of boost/libs/lexical_cast/include/boost/lexical_cast.hpp