diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f338a8d..08b62e2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -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 diff --git a/appveyor.yml b/appveyor.yml index 9e25cde..bcd5cb6 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -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 diff --git a/include/boost/core/detail/string_view.hpp b/include/boost/core/detail/string_view.hpp index 8b13c0f..fedfbc9 100644 --- a/include/boost/core/detail/string_view.hpp +++ b/include/boost/core/detail/string_view.hpp @@ -34,6 +34,9 @@ namespace boost { + +template class basic_string_view; + namespace core { namespace detail @@ -388,6 +391,11 @@ public: #endif + template basic_string_view( boost::basic_string_view > const& str, + typename boost::enable_if >::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 operator boost::basic_string_view, std::char_traits >::type> () const BOOST_NOEXCEPT + { + return boost::basic_string_view< Ch, std::char_traits >( data(), size() ); + } + // iterator support BOOST_CONSTEXPR const_iterator begin() const BOOST_NOEXCEPT diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 4f85621..7524ae6 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -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) diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 9be78c0..2eedc2e 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -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 ; diff --git a/test/sv_conversion_test2.cpp b/test/sv_conversion_test2.cpp new file mode 100644 index 0000000..ee0e196 --- /dev/null +++ b/test/sv_conversion_test2.cpp @@ -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 +#include +#include +#include + +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(); +}