1// Unit test for boost::lexical_cast.
2//
3// See http://www.boost.org for most recent version, including documentation.
4//
5// Copyright Antony Polukhin, 2012-2024.
6//
7// Distributed under the Boost
8// Software License, Version 1.0. (See accompanying file
9// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt).
10
11#include <boost/lexical_cast.hpp>
12
13#include <boost/core/lightweight_test.hpp>
14
15#if defined(BOOST_NO_STRINGSTREAM)
16 typedef std::strstream ss_t;
17#else
18 typedef std::stringstream ss_t;
19#endif
20
21void test_void_pointers_conversions()
22{
23 void *p_to_null = NULL;
24 const void *cp_to_data = "Some data";
25 char nonconst_data[5];
26 void *p_to_data = nonconst_data;
27 ss_t ss;
28
29 ss << p_to_null;
30 BOOST_TEST_EQ(boost::lexical_cast<std::string>(p_to_null), ss.str());
31 ss.str(s: std::string());
32
33 ss << cp_to_data;
34 BOOST_TEST_EQ(boost::lexical_cast<std::string>(cp_to_data), ss.str());
35 ss.str(s: std::string());
36
37 ss << p_to_data;
38 BOOST_TEST_EQ(boost::lexical_cast<std::string>(p_to_data), ss.str());
39 ss.str(s: std::string());
40}
41
42struct incomplete_type;
43
44void test_incomplete_type_pointers_conversions()
45{
46 incomplete_type *p_to_null = NULL;
47 const incomplete_type *cp_to_data = NULL;
48 char nonconst_data[5];
49 incomplete_type *p_to_data = reinterpret_cast<incomplete_type*>(nonconst_data);
50 ss_t ss;
51
52 ss << p_to_null;
53 BOOST_TEST_EQ(boost::lexical_cast<std::string>(p_to_null), ss.str());
54 ss.str(s: std::string());
55
56 ss << cp_to_data;
57 BOOST_TEST_EQ(boost::lexical_cast<std::string>(cp_to_data), ss.str());
58 ss.str(s: std::string());
59
60 ss << p_to_data;
61 BOOST_TEST_EQ(boost::lexical_cast<std::string>(p_to_data), ss.str());
62 ss.str(s: std::string());
63}
64
65struct ble;
66typedef struct ble *meh;
67std::ostream& operator <<(std::ostream &o, meh) {
68 o << "yay";
69 return o;
70}
71
72void test_inomplete_type_with_overloaded_ostream_op() {
73 meh heh = NULL;
74 ss_t ss;
75 ss << heh;
76 BOOST_TEST_EQ(boost::lexical_cast<std::string>(heh), ss.str());
77}
78
79int main()
80{
81 test_void_pointers_conversions();
82 test_incomplete_type_pointers_conversions();
83 test_inomplete_type_with_overloaded_ostream_op();
84
85 return boost::report_errors();
86}
87

source code of boost/libs/lexical_cast/test/pointers_test.cpp