Compare commits

...

7 Commits

Author SHA1 Message Date
Marshall Clow
00f02167e3 Add tests to ensure that string_view|ref from rvalue fails (whenever it can) 2017-02-13 10:25:04 -08:00
Marshall Clow
9960d9f395 Don't construct string_view|string_ref from rvalue string. That way lies pain 2017-02-13 08:15:44 -08:00
Andrey Semashev
ccfd741c0a Merge pull request #27 from MarcelRaad/patch-1
Use non-deprecated include paths
2016-12-21 12:20:20 +04:00
Marcel Raad
c5c479d49c Use non-deprecated include paths
According to the comments in these two headers, the files in the core directory should be used instead.
2016-12-21 08:22:35 +01:00
Marshall Clow
3e8f73c6ac Merge pull request #26 from Surrog/develop
Fixing visual studio compilation of string_view::at(); preserving C++11 constexpr-ness.
2016-12-12 17:22:29 -08:00
Surogate
38121f2af3 Allow string_view::at() to be constexpr again on VS2015
VS2015 doesn't support extended constexpr. Thanks to Lastique for the
ternary trick
2016-12-12 23:45:34 +01:00
Surogate
38b536ff05 Fixing visual studio compilation of string_view::at()
VS2013, VS2015 & VS2017RC don't like the ternary throwing an exception :
'return': cannot convert from 'void' to 'const char &'
Now using classic if when compiling on a windows platform.
2016-12-12 22:57:56 +01:00
6 changed files with 77 additions and 9 deletions

View File

@@ -14,8 +14,8 @@
#include <boost/utility/binary.hpp>
#include <boost/utility/enable_if.hpp>
#include <boost/utility/identity_type.hpp>
#include <boost/checked_delete.hpp>
#include <boost/core/checked_delete.hpp>
#include <boost/core/noncopyable.hpp>
#include <boost/next_prior.hpp>
#include <boost/noncopyable.hpp>
#endif // BOOST_UTILITY_HPP

View File

@@ -92,6 +92,13 @@ namespace boost {
basic_string_ref(const std::basic_string<charT, traits, Allocator>& str)
: ptr_(str.data()), len_(str.length()) {}
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_NO_CXX11_DELETED_FUNCTIONS)
// Constructing a string_ref from a temporary string is a bad idea
template<typename Allocator>
basic_string_ref( std::basic_string<charT, traits, Allocator>&&)
= delete;
#endif
BOOST_CONSTEXPR basic_string_ref(const charT* str, size_type len) BOOST_NOEXCEPT
: ptr_(str), len_(len) {}

View File

@@ -91,9 +91,15 @@ namespace boost {
#endif
template<typename Allocator>
basic_string_view(const std::basic_string<charT, traits,
Allocator>& str) BOOST_NOEXCEPT
: ptr_(str.data()), len_(str.length()) {}
basic_string_view(const std::basic_string<charT, traits, Allocator>& str) BOOST_NOEXCEPT
: ptr_(str.data()), len_(str.length()) {}
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_NO_CXX11_DELETED_FUNCTIONS)
// Constructing a string_view from a temporary string is a bad idea
template<typename Allocator>
basic_string_view( std::basic_string<charT, traits, Allocator>&&)
= delete;
#endif
BOOST_CONSTEXPR basic_string_view(const charT* str)
: ptr_(str), len_(traits::length(str)) {}
@@ -121,10 +127,7 @@ namespace boost {
BOOST_CONSTEXPR const_reference operator[](size_type pos) const BOOST_NOEXCEPT { return ptr_[pos]; }
BOOST_CONSTEXPR const_reference at(size_t pos) const {
return pos >= len_ ? BOOST_THROW_EXCEPTION(std::out_of_range("boost::string_view::at")) : ptr_[pos];
// if ( pos >= len_ )
// BOOST_THROW_EXCEPTION( std::out_of_range ( "boost::string_view::at" ) );
// return ptr_[pos];
return pos >= len_ ? BOOST_THROW_EXCEPTION(std::out_of_range("boost::string_view::at")), ptr_[0] : ptr_[pos];
}
BOOST_CONSTEXPR const_reference front() const { return ptr_[0]; }

View File

@@ -27,9 +27,11 @@ test-suite utility
[ run ../operators_test.cpp ../../test/build//boost_test_exec_monitor/<link>static ]
[ compile result_of_test.cpp ]
[ run ../shared_iterator_test.cpp ]
[ compile-fail string_ref_from_rvalue.cpp ]
[ run string_ref_test1.cpp unit_test_framework ]
[ run string_ref_test2.cpp unit_test_framework ]
[ run string_ref_test_io.cpp unit_test_framework ]
[ compile-fail string_view_from_rvalue.cpp ]
[ run string_view_test1.cpp unit_test_framework ]
[ run string_view_test2.cpp unit_test_framework ]
[ run string_view_test_io.cpp unit_test_framework ]

View File

@@ -0,0 +1,28 @@
/*
Copyright (c) Marshall Clow 2017.
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)
For more information, see http://www.boost.org
*/
#include <iostream>
#include <algorithm>
#include <string>
#include <boost/utility/string_ref.hpp>
#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) || defined(BOOST_NO_CXX11_DELETED_FUNCTIONS)
#error "Unsupported test"
#endif
#include "boost/test/minimal.hpp"
std::string makeatemp() { return "abc"; }
int test_main(int, char **)
{
boost::basic_string_ref<char> sv(makeatemp());
return 0;
}

View File

@@ -0,0 +1,28 @@
/*
Copyright (c) Marshall Clow 2017.
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)
For more information, see http://www.boost.org
*/
#include <iostream>
#include <algorithm>
#include <string>
#include <boost/utility/string_view.hpp>
#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) || defined(BOOST_NO_CXX11_DELETED_FUNCTIONS)
#error "Unsupported test"
#endif
#include "boost/test/minimal.hpp"
std::string makeatemp() { return "abc"; }
int test_main(int, char **)
{
boost::basic_string_view<char> sv(makeatemp());
return 0;
}