Add conversions from and to boost::string_view

This commit is contained in:
Peter Dimov 2021-12-18 03:28:17 +02:00
parent 02b3f91fc3
commit 7a79d17da2
6 changed files with 60 additions and 2 deletions

View File

@ -386,6 +386,9 @@ jobs:
git submodule init libs/static_assert
git submodule init libs/throw_exception
git submodule init libs/type_traits
git submodule init libs/utility
git submodule init libs/io
git submodule init libs/preprocessor
git submodule update $GIT_ARGS
if [ -z "${{matrix.cmake_tests}}" ]
then
@ -517,6 +520,8 @@ jobs:
git submodule init libs/static_assert
git submodule init libs/throw_exception
git submodule init libs/type_traits
git submodule init libs/utility
git submodule init libs/io
git submodule update --jobs %GIT_FETCH_JOBS%
cmd /c bootstrap
b2 -d0 headers

View File

@ -1,4 +1,4 @@
# Copyright 2016-2019 Peter Dimov
# Copyright 2016-2021 Peter Dimov
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt)
@ -77,6 +77,8 @@ install:
- git submodule init libs/static_assert
- git submodule init libs/throw_exception
- git submodule init libs/type_traits
- git submodule init libs/utility
- git submodule init libs/io
- git submodule init tools/build
- git submodule init tools/boost_install
- git submodule update --jobs 4

View File

@ -34,6 +34,9 @@
namespace boost
{
template<class Ch, class Tr> class basic_string_view;
namespace core
{
namespace detail
@ -388,6 +391,11 @@ public:
#endif
template<class Ch2> basic_string_view( boost::basic_string_view<Ch2, std::char_traits<Ch2> > const& str,
typename boost::enable_if<is_same<Ch, Ch2> >::type* = 0 ) BOOST_NOEXCEPT: p_( str.data() ), n_( str.size() )
{
}
// BOOST_CONSTEXPR basic_string_view& operator=( basic_string_view const& ) BOOST_NOEXCEPT & = default;
// conversions
@ -407,6 +415,12 @@ public:
#endif
template<class Ch2> operator boost::basic_string_view<Ch2,
typename boost::enable_if<boost::core::is_same<Ch2, Ch>, std::char_traits<Ch> >::type> () const BOOST_NOEXCEPT
{
return boost::basic_string_view< Ch, std::char_traits<Ch> >( data(), size() );
}
// iterator support
BOOST_CONSTEXPR const_iterator begin() const BOOST_NOEXCEPT

View File

@ -1,4 +1,4 @@
# Copyright 2018, 2019, 2021 Peter Dimov
# Copyright 2018-2021 Peter Dimov
# 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
@ -23,6 +23,10 @@ set(BOOST_TEST_LINK_LIBRARIES Boost::core Boost::throw_exception)
boost_test(TYPE run SOURCES no_exceptions_support_test.cpp)
set(BOOST_TEST_LINK_LIBRARIES Boost::core Boost::utility)
boost_test(TYPE run SOURCES sv_conversion_test2.cpp)
endif()
add_subdirectory(swap)

View File

@ -305,6 +305,7 @@ run sv_eq_test.cpp ;
run sv_lt_test.cpp ;
run sv_stream_insert_test.cpp ;
run sv_conversion_test.cpp ;
run sv_conversion_test2.cpp : ;
run span_test.cpp ;
run span_types_test.cpp ;

View File

@ -0,0 +1,32 @@
// Copyright 2021 Peter Dimov
// Distributed under the Boost Software License, Version 1.0.
// https://www.boost.org/LICENSE_1_0.txt
#include <boost/core/detail/string_view.hpp>
#include <boost/utility/string_view.hpp>
#include <boost/core/lightweight_test.hpp>
#include <string>
boost::core::string_view f( boost::core::string_view const& str )
{
return str;
}
int main()
{
{
std::string s1( "123" );
std::string s2 = f( s1 );
BOOST_TEST_EQ( s1, s2 );
}
{
boost::string_view s1( "123" );
boost::string_view s2 = f( s1 );
BOOST_TEST_EQ( s1, s2 );
}
return boost::report_errors();
}