Unconditional noexcept when exceptions are disabled

This commit is contained in:
Krystian Stasiowski
2019-12-26 17:22:57 -05:00
parent 60fcd0db87
commit b46772da19
5 changed files with 253 additions and 213 deletions

View File

@ -65,11 +65,21 @@ A fixed capacity string is useful when:
[/-----------------------------------------------------------------------------]
[section Requirements]
The library is usable in two different modes: standalone and Boost dependent. This library defaults to Boost dependent mode; standalone mode is opt-in through the use of a configuration macro.
When in Boost dependent mode, the library requires the use of at least C++11, in addition to Boost.Core, Boost.Utility, and Boost.ContainerHash. In standalone mode, C++17 is required but no libraries except for the standard library are needed.
[endsect]
[/-----------------------------------------------------------------------------]
[section Design]
The over-arching design goal is to resemble the interface and behavior of
`std::string` as much as possible. When any operation would exceed the
maximum allowed size of the string, `std::length_error` is thrown. All
maximum allowed size of the string, `std::length_error` is thrown if exceptions are enabled. All
algorithms which throw exceptions provide the strong exception safety
guarantee. This is intended to be a drop in replacement for `std::string`.
All the operations for `static_string` work when the source is within the string itself.
@ -80,8 +90,7 @@ and certain functions that will never throw are marked as `noexcept`, which dive
those of `std::string`. Every function that is in the C++20 specification of `std::string` is
present in this implementation, with the only difference being the lack of `constexpr`
for the time being. The avaliable overloads for `static_string` are identical to those
of `std::string`, except for `operator+` which is explicitly deleted as no reasonable implementation
would be possible, due to the difficulty in determining the size of the resulting `static_string`.
of `std::string`.
[endsect]
@ -89,8 +98,7 @@ would be possible, due to the difficulty in determining the size of the resultin
[section Iterators]
The iterator invalidation rules are different than those for `std::string`,
since:
The iterator invalidation rules differ from those of `std::string`:
* Moving a string invalidates all iterators
* Swapping two strings invalidates all iterators
@ -99,6 +107,34 @@ since:
[/-----------------------------------------------------------------------------]
[section Optimizations]
Depending on the character type and size used for a specialization of `static_string`, certain optimizations are used to reduce the size of the class type. Given the name of a specialization of the form `static_string<N, CharT, Traits>`:
* If `N` is 0, then the class has no non-static data members. Given two objects `a` and `b` of type `static_string<0, T>` and `static_string<0, U>` respectively, the pointer value returned by `data()` will be the same if `T` and `U` are the same.
* Otherwise, the type of the member used to store the size of the `static_string` will be the smallest standard unsigned integer type that can represent the value `N`.
The optionally enabled null-terminator optimization will instead store the size of the `static_string` in the last character of the data array as `N - size()` if `CharT` can represent the value `N`.
[endsect]
[/-----------------------------------------------------------------------------]
[section Configuration]
Certain features can be enabled and disabled though defining configuration macros. The macros and the associated feature they control are:
* `BOOST_STATIC_STRING_STANDALONE`: When defined, the library is put into standalone mode.
* `BOOST_STATIC_STRING_NO_EXCEPTIONS`: When defined, exceptions and their associated checks are disabled.
* `BOOST_STATIC_STRING_NULL_OPTIMIZATION`: When defined, the `static_string` will use the null-terminator optimization.
[endsect]
[/-----------------------------------------------------------------------------]
[section:ref Reference]
[include reference.qbk]
[endsect]

View File

@ -15,7 +15,7 @@
// #define BOOST_STATIC_STRING_STANDALONE
// Disable exceptions and their associated checks
// #define BOOST_STATIC_STRING_NO_EXCEPTIONS
#define BOOST_STATIC_STRING_NO_EXCEPTIONS
// Opt-in to the null terminator optimization
// #define BOOST_STATIC_STRING_NULL_OPTIMIZATION
@ -81,8 +81,11 @@
#endif
#ifdef BOOST_STATIC_STRING_NO_EXCEPTIONS
#define BOOST_STATIC_STRING_COND_NOEXCEPT noexcept
#define BOOST_STATIC_STRING_THROW_IF(cond, ex)
#define BOOST_STATIC_STRING_THROW(ex)
#else
#define BOOST_STATIC_STRING_COND_NOEXCEPT
#endif
// Boost and non-Boost versions of utilities

View File

@ -167,6 +167,7 @@ private:
template<typename CharT, typename Traits>
constexpr CharT static_string_base_zero<0, CharT, Traits>::null_;
#ifdef BOOST_STATIC_STRING_NULL_OPTIMIZATION
// Optimization for storing the size in the last element
template<std::size_t N, typename CharT, typename Traits>
class static_string_base_null
@ -219,6 +220,7 @@ public:
CharT data_[N + 1]{0};
#endif
};
#endif
// Decides which size optimization to use
// If the size is zero, the object will have no members

View File

@ -36,7 +36,7 @@ basic_static_string() noexcept
template<std::size_t N, typename CharT, typename Traits>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
basic_static_string<N, CharT, Traits>::
basic_static_string(size_type count, CharT ch)
basic_static_string(size_type count, CharT ch) BOOST_STATIC_STRING_COND_NOEXCEPT
{
assign(count, ch);
}
@ -46,7 +46,7 @@ template<std::size_t M>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
basic_static_string<N, CharT, Traits>::
basic_static_string(basic_static_string<M, CharT, Traits> const& other,
size_type pos)
size_type pos) BOOST_STATIC_STRING_COND_NOEXCEPT
{
assign(other, pos);
}
@ -58,7 +58,7 @@ basic_static_string<N, CharT, Traits>::
basic_static_string(
basic_static_string<M, CharT, Traits> const& other,
size_type pos,
size_type count)
size_type count) BOOST_STATIC_STRING_COND_NOEXCEPT
{
assign(other, pos, count);
}
@ -66,7 +66,7 @@ basic_static_string(
template<std::size_t N, typename CharT, typename Traits>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
basic_static_string<N, CharT, Traits>::
basic_static_string(CharT const* s, size_type count)
basic_static_string(CharT const* s, size_type count) BOOST_STATIC_STRING_COND_NOEXCEPT
{
assign(s, count);
}
@ -74,7 +74,7 @@ basic_static_string(CharT const* s, size_type count)
template<std::size_t N, typename CharT, typename Traits>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
basic_static_string<N, CharT, Traits>::
basic_static_string(CharT const* s)
basic_static_string(CharT const* s) BOOST_STATIC_STRING_COND_NOEXCEPT
{
auto const count = Traits::length(s);
BOOST_STATIC_STRING_THROW_IF(count > max_size(),
@ -92,7 +92,7 @@ basic_static_string(
InputIterator last,
typename std::enable_if<
detail::is_input_iterator<InputIterator>::value,
iterator>::type*)
iterator>::type*) BOOST_STATIC_STRING_COND_NOEXCEPT
{
assign(first, last);
}
@ -111,7 +111,7 @@ template<std::size_t M>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
basic_static_string<N, CharT, Traits>::
basic_static_string(
basic_static_string<M, CharT, Traits> const& s)
basic_static_string<M, CharT, Traits> const& s) BOOST_STATIC_STRING_COND_NOEXCEPT
{
assign(s);
}
@ -119,7 +119,7 @@ basic_static_string(
template<std::size_t N, typename CharT, typename Traits>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
basic_static_string<N, CharT, Traits>::
basic_static_string(std::initializer_list<CharT> init)
basic_static_string(std::initializer_list<CharT> init) BOOST_STATIC_STRING_COND_NOEXCEPT
{
assign(init.begin(), init.end());
}
@ -127,7 +127,7 @@ basic_static_string(std::initializer_list<CharT> init)
template<std::size_t N, typename CharT, typename Traits>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
basic_static_string<N, CharT, Traits>::
basic_static_string(string_view_type sv)
basic_static_string(string_view_type sv) BOOST_STATIC_STRING_COND_NOEXCEPT
{
assign(sv);
}
@ -136,7 +136,7 @@ template<std::size_t N, typename CharT, typename Traits>
template<class T, class>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
basic_static_string<N, CharT, Traits>::
basic_static_string(T const& t, size_type pos, size_type n)
basic_static_string(T const& t, size_type pos, size_type n) BOOST_STATIC_STRING_COND_NOEXCEPT
{
assign(t, pos, n);
}
@ -153,7 +153,7 @@ auto
basic_static_string<N, CharT, Traits>::
assign(
size_type count,
CharT ch) ->
CharT ch) BOOST_STATIC_STRING_COND_NOEXCEPT ->
basic_static_string&
{
BOOST_STATIC_STRING_THROW_IF(count > max_size(),
@ -188,7 +188,7 @@ basic_static_string<N, CharT, Traits>::
assign(
basic_static_string<M, CharT, Traits> const& s,
size_type pos,
size_type count) ->
size_type count) BOOST_STATIC_STRING_COND_NOEXCEPT ->
basic_static_string&
{
auto const ss = s.subview(pos, count);
@ -201,7 +201,7 @@ auto
basic_static_string<N, CharT, Traits>::
assign(
CharT const* s,
size_type count) ->
size_type count) BOOST_STATIC_STRING_COND_NOEXCEPT ->
basic_static_string&
{
BOOST_STATIC_STRING_THROW_IF(count > max_size(),
@ -219,7 +219,7 @@ auto
basic_static_string<N, CharT, Traits>::
assign(
InputIterator first,
InputIterator last) ->
InputIterator last) BOOST_STATIC_STRING_COND_NOEXCEPT ->
typename std::enable_if<
detail::is_input_iterator<InputIterator>::value,
basic_static_string&>::type
@ -244,7 +244,7 @@ template<std::size_t N, typename CharT, typename Traits>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
auto
basic_static_string<N, CharT, Traits>::
at(size_type pos) ->
at(size_type pos) BOOST_STATIC_STRING_COND_NOEXCEPT ->
reference
{
BOOST_STATIC_STRING_THROW_IF(
@ -256,7 +256,7 @@ template<std::size_t N, typename CharT, typename Traits>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
auto
basic_static_string<N, CharT, Traits>::
at(size_type pos) const ->
at(size_type pos) const BOOST_STATIC_STRING_COND_NOEXCEPT ->
const_reference
{
BOOST_STATIC_STRING_THROW_IF(
@ -274,7 +274,7 @@ template<std::size_t N, typename CharT, typename Traits>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
void
basic_static_string<N, CharT, Traits>::
reserve(std::size_t n)
reserve(std::size_t n) BOOST_STATIC_STRING_COND_NOEXCEPT
{
BOOST_STATIC_STRING_THROW_IF(
n > max_size(), std::length_error{"n > max_size()"});
@ -305,7 +305,7 @@ basic_static_string<N, CharT, Traits>::
insert(
size_type index,
size_type count,
CharT ch) ->
CharT ch) BOOST_STATIC_STRING_COND_NOEXCEPT ->
basic_static_string&
{
BOOST_STATIC_STRING_THROW_IF(
@ -321,7 +321,7 @@ basic_static_string<N, CharT, Traits>::
insert(
size_type index,
CharT const* s,
size_type count) ->
size_type count) BOOST_STATIC_STRING_COND_NOEXCEPT ->
basic_static_string&
{
const auto curr_size = size();
@ -362,7 +362,7 @@ basic_static_string<N, CharT, Traits>::
insert(
const_iterator pos,
size_type count,
CharT ch) ->
CharT ch) BOOST_STATIC_STRING_COND_NOEXCEPT ->
iterator
{
const auto curr_size = size();
@ -385,7 +385,7 @@ basic_static_string<N, CharT, Traits>::
insert(
const_iterator pos,
InputIterator first,
InputIterator last) ->
InputIterator last) BOOST_STATIC_STRING_COND_NOEXCEPT ->
typename std::enable_if<
detail::is_input_iterator<
InputIterator>::value, iterator>::type
@ -401,7 +401,7 @@ auto
basic_static_string<N, CharT, Traits>::
insert(
size_type index,
T const & t) ->
T const & t) BOOST_STATIC_STRING_COND_NOEXCEPT ->
typename std::enable_if<
std::is_convertible<
T const&, string_view_type>::value &&
@ -421,7 +421,7 @@ insert(
size_type index,
T const & t,
size_type index_str,
size_type count) ->
size_type count) BOOST_STATIC_STRING_COND_NOEXCEPT ->
typename std::enable_if<
std::is_convertible<
T const&, string_view_type>::value &&
@ -442,7 +442,7 @@ auto
basic_static_string<N, CharT, Traits>::
erase(
size_type index,
size_type count) ->
size_type count) BOOST_STATIC_STRING_COND_NOEXCEPT ->
basic_static_string&
{
const auto curr_size = size();
@ -460,7 +460,7 @@ BOOST_STATIC_STRING_CPP14_CONSTEXPR
auto
basic_static_string<N, CharT, Traits>::
erase(
const_iterator pos) ->
const_iterator pos) BOOST_STATIC_STRING_COND_NOEXCEPT ->
iterator
{
erase(pos - begin(), 1);
@ -473,7 +473,7 @@ auto
basic_static_string<N, CharT, Traits>::
erase(
const_iterator first,
const_iterator last) ->
const_iterator last) BOOST_STATIC_STRING_COND_NOEXCEPT ->
iterator
{
erase(first - begin(),
@ -486,7 +486,7 @@ BOOST_STATIC_STRING_CPP14_CONSTEXPR
void
basic_static_string<N, CharT, Traits>::
push_back(
CharT ch)
CharT ch) BOOST_STATIC_STRING_COND_NOEXCEPT
{
const auto curr_size = size();
BOOST_STATIC_STRING_THROW_IF(
@ -502,7 +502,7 @@ auto
basic_static_string<N, CharT, Traits>::
append(
CharT const* s,
size_type count) ->
size_type count) BOOST_STATIC_STRING_COND_NOEXCEPT ->
basic_static_string&
{
const auto curr_size = size();
@ -518,7 +518,7 @@ template<std::size_t N, typename CharT, typename Traits>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
auto
basic_static_string<N, CharT, Traits>::
substr(size_type pos, size_type count) const ->
substr(size_type pos, size_type count) const BOOST_STATIC_STRING_COND_NOEXCEPT ->
basic_static_string
{
BOOST_STATIC_STRING_THROW_IF(
@ -530,7 +530,7 @@ template<std::size_t N, typename CharT, typename Traits>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
auto
basic_static_string<N, CharT, Traits>::
subview(size_type pos, size_type count) const ->
subview(size_type pos, size_type count) const BOOST_STATIC_STRING_COND_NOEXCEPT ->
string_view_type
{
BOOST_STATIC_STRING_THROW_IF(
@ -554,7 +554,7 @@ template<std::size_t N, typename CharT, typename Traits>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
void
basic_static_string<N, CharT, Traits>::
resize(std::size_t n)
resize(std::size_t n) BOOST_STATIC_STRING_COND_NOEXCEPT
{
const auto curr_size = size();
BOOST_STATIC_STRING_THROW_IF(
@ -569,7 +569,7 @@ template<std::size_t N, typename CharT, typename Traits>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
void
basic_static_string<N, CharT, Traits>::
resize(std::size_t n, CharT c)
resize(std::size_t n, CharT c) BOOST_STATIC_STRING_COND_NOEXCEPT
{
const auto curr_size = size();
BOOST_STATIC_STRING_THROW_IF(
@ -599,7 +599,7 @@ template<std::size_t M>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
void
basic_static_string<N, CharT, Traits>::
swap(basic_static_string<M, CharT, Traits>& s)
swap(basic_static_string<M, CharT, Traits>& s) BOOST_STATIC_STRING_COND_NOEXCEPT
{
const auto curr_size = size();
BOOST_STATIC_STRING_THROW_IF(
@ -621,7 +621,7 @@ replace(
size_type pos,
size_type n1,
const CharT* s,
size_type n2) -> basic_static_string<N, CharT, Traits>&
size_type n2) BOOST_STATIC_STRING_COND_NOEXCEPT -> basic_static_string<N, CharT, Traits>&
{
const auto curr_size = size();
const auto curr_data = data();
@ -677,7 +677,7 @@ replace(
size_type pos,
size_type n1,
size_type n2,
CharT c) -> basic_static_string<N, CharT, Traits> &
CharT c) BOOST_STATIC_STRING_COND_NOEXCEPT -> basic_static_string<N, CharT, Traits> &
{
const auto curr_size = size();
const auto curr_data = data();
@ -829,7 +829,7 @@ assign_char(CharT ch, std::true_type) noexcept ->
template<std::size_t N, typename CharT, typename Traits>
auto
basic_static_string<N, CharT, Traits>::
assign_char(CharT, std::false_type) ->
assign_char(CharT, std::false_type) BOOST_STATIC_STRING_COND_NOEXCEPT ->
basic_static_string&
{
BOOST_STATIC_STRING_THROW(std::length_error{"max_size() == 0"});
@ -840,7 +840,7 @@ assign_char(CharT, std::false_type) ->
static_string<std::numeric_limits<int>::digits10 + 1>
inline
to_static_string(int value)
to_static_string(int value) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return detail::to_static_string_int_impl<
std::numeric_limits<int>::digits10 + 1>(value);
@ -848,7 +848,7 @@ to_static_string(int value)
static_string<std::numeric_limits<long>::digits10 + 1>
inline
to_static_string(long value)
to_static_string(long value) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return detail::to_static_string_int_impl<
std::numeric_limits<long>::digits10 + 1>(value);
@ -856,7 +856,7 @@ to_static_string(long value)
static_string<std::numeric_limits<long long>::digits10 + 1>
inline
to_static_string(long long value)
to_static_string(long long value) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return detail::to_static_string_int_impl<
std::numeric_limits<long long>::digits10 + 1>(value);
@ -864,7 +864,7 @@ to_static_string(long long value)
static_string<std::numeric_limits<unsigned int>::digits10 + 1>
inline
to_static_string(unsigned int value)
to_static_string(unsigned int value) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return detail::to_static_string_int_impl<
std::numeric_limits<unsigned int>::digits10 + 1>(value);
@ -872,7 +872,7 @@ to_static_string(unsigned int value)
static_string<std::numeric_limits<unsigned long>::digits10 + 1>
inline
to_static_string(unsigned long value)
to_static_string(unsigned long value) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return detail::to_static_string_int_impl<
std::numeric_limits<unsigned long>::digits10 + 1>(value);
@ -880,7 +880,7 @@ to_static_string(unsigned long value)
static_string<std::numeric_limits<unsigned long long>::digits10 + 1>
inline
to_static_string(unsigned long long value)
to_static_string(unsigned long long value) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return detail::to_static_string_int_impl<
std::numeric_limits<unsigned long long>::digits10 + 1>(value);
@ -888,7 +888,7 @@ to_static_string(unsigned long long value)
static_string<std::numeric_limits<float>::max_digits10 + 1>
inline
to_static_string(float value)
to_static_string(float value) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return detail::to_static_string_float_impl<
std::numeric_limits<float>::max_digits10 + 1>(value);
@ -896,7 +896,7 @@ to_static_string(float value)
static_string<std::numeric_limits<double>::max_digits10 + 1>
inline
to_static_string(double value)
to_static_string(double value) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return detail::to_static_string_float_impl<
std::numeric_limits<double>::max_digits10 + 1>(value);
@ -904,7 +904,7 @@ to_static_string(double value)
static_string<std::numeric_limits<long double>::max_digits10 + 1>
inline
to_static_string(long double value)
to_static_string(long double value) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return detail::to_static_string_float_impl<
std::numeric_limits<long double>::max_digits10 + 1>(value);
@ -914,7 +914,7 @@ to_static_string(long double value)
static_wstring<std::numeric_limits<int>::digits10 + 1>
inline
to_static_wstring(int value)
to_static_wstring(int value) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return detail::to_static_wstring_int_impl<
std::numeric_limits<int>::digits10 + 1>(value);
@ -922,7 +922,7 @@ to_static_wstring(int value)
static_wstring<std::numeric_limits<long>::digits10 + 1>
inline
to_static_wstring(long value)
to_static_wstring(long value) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return detail::to_static_wstring_int_impl<
std::numeric_limits<long>::digits10 + 1>(value);
@ -930,7 +930,7 @@ to_static_wstring(long value)
static_wstring<std::numeric_limits<long long>::digits10 + 1>
inline
to_static_wstring(long long value)
to_static_wstring(long long value) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return detail::to_static_wstring_int_impl<
std::numeric_limits<long long>::digits10 + 1>(value);
@ -938,7 +938,7 @@ to_static_wstring(long long value)
static_wstring<std::numeric_limits<unsigned int>::digits10 + 1>
inline
to_static_wstring(unsigned int value)
to_static_wstring(unsigned int value) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return detail::to_static_wstring_int_impl<
std::numeric_limits<unsigned int>::digits10 + 1>(value);
@ -946,7 +946,7 @@ to_static_wstring(unsigned int value)
static_wstring<std::numeric_limits<unsigned long>::digits10 + 1>
inline
to_static_wstring(unsigned long value)
to_static_wstring(unsigned long value) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return detail::to_static_wstring_int_impl<
std::numeric_limits<unsigned long>::digits10 + 1>(value);
@ -954,7 +954,7 @@ to_static_wstring(unsigned long value)
static_wstring<std::numeric_limits<unsigned long long>::digits10 + 1>
inline
to_static_wstring(unsigned long long value)
to_static_wstring(unsigned long long value) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return detail::to_static_wstring_int_impl<
std::numeric_limits<unsigned long long>::digits10 + 1>(value);
@ -962,7 +962,7 @@ to_static_wstring(unsigned long long value)
static_wstring<std::numeric_limits<float>::max_digits10 + 1>
inline
to_static_wstring(float value)
to_static_wstring(float value) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return detail::to_static_wstring_float_impl<
std::numeric_limits<float>::max_digits10 + 1>(value);
@ -970,7 +970,7 @@ to_static_wstring(float value)
static_wstring<std::numeric_limits<double>::max_digits10 + 1>
inline
to_static_wstring(double value)
to_static_wstring(double value) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return detail::to_static_wstring_float_impl<
std::numeric_limits<double>::max_digits10 + 1>(value);
@ -978,7 +978,7 @@ to_static_wstring(double value)
static_wstring<std::numeric_limits<long double>::max_digits10 + 1>
inline
to_static_wstring(long double value)
to_static_wstring(long double value) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return detail::to_static_wstring_float_impl<
std::numeric_limits<long double>::max_digits10 + 1>(value);

View File

@ -117,7 +117,7 @@ public:
BOOST_STATIC_STRING_CPP14_CONSTEXPR
basic_static_string(
size_type count,
CharT ch);
CharT ch) BOOST_STATIC_STRING_COND_NOEXCEPT;
/** Construct a `basic_static_string`.
@ -127,7 +127,7 @@ public:
BOOST_STATIC_STRING_CPP14_CONSTEXPR
basic_static_string(
basic_static_string<M, CharT, Traits> const& other,
size_type pos);
size_type pos) BOOST_STATIC_STRING_COND_NOEXCEPT;
/** Construct a `basic_static_string`.
@ -138,7 +138,7 @@ public:
basic_static_string(
basic_static_string<M, CharT, Traits> const& other,
size_type pos,
size_type count);
size_type count) BOOST_STATIC_STRING_COND_NOEXCEPT;
/** Construct a `basic_static_string`.
@ -147,7 +147,7 @@ public:
BOOST_STATIC_STRING_CPP14_CONSTEXPR
basic_static_string(
CharT const* s,
size_type count);
size_type count) BOOST_STATIC_STRING_COND_NOEXCEPT;
/** Construct a `basic_static_string`.
@ -155,7 +155,7 @@ public:
*/
BOOST_STATIC_STRING_CPP14_CONSTEXPR
basic_static_string(
CharT const* s);
CharT const* s) BOOST_STATIC_STRING_COND_NOEXCEPT;
/** Construct a `basic_static_string`.
@ -171,7 +171,7 @@ public:
detail::is_input_iterator<InputIterator>::value,
iterator>::type* = 0
#endif
);
) BOOST_STATIC_STRING_COND_NOEXCEPT;
/** Construct a `basic_static_string`.
@ -188,7 +188,7 @@ public:
template<std::size_t M>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
basic_static_string(
basic_static_string<M, CharT, Traits> const& other);
basic_static_string<M, CharT, Traits> const& other) BOOST_STATIC_STRING_COND_NOEXCEPT;
/** Construct a `basic_static_string`.
@ -196,7 +196,7 @@ public:
*/
BOOST_STATIC_STRING_CPP14_CONSTEXPR
basic_static_string(
std::initializer_list<CharT> init);
std::initializer_list<CharT> init) BOOST_STATIC_STRING_COND_NOEXCEPT;
/** Construct a `basic_static_string`.
@ -205,7 +205,7 @@ public:
explicit
BOOST_STATIC_STRING_CPP14_CONSTEXPR
basic_static_string(
string_view_type sv);
string_view_type sv) BOOST_STATIC_STRING_COND_NOEXCEPT;
/** Construct a `basic_static_string`.
@ -225,7 +225,7 @@ public:
basic_static_string(
T const& t,
size_type pos,
size_type n);
size_type n) BOOST_STATIC_STRING_COND_NOEXCEPT;
//--------------------------------------------------------------------------
//
@ -256,7 +256,7 @@ public:
BOOST_STATIC_STRING_CPP14_CONSTEXPR
basic_static_string&
operator=(
basic_static_string<M, CharT, Traits> const& s)
basic_static_string<M, CharT, Traits> const& s) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return assign(s);
}
@ -270,7 +270,7 @@ public:
BOOST_STATIC_STRING_CPP14_CONSTEXPR
basic_static_string&
operator=(
CharT const* s)
CharT const* s) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return assign(s);
}
@ -282,7 +282,7 @@ public:
BOOST_STATIC_STRING_CPP14_CONSTEXPR
basic_static_string&
operator=(
CharT ch)
CharT ch) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return assign_char(ch,
std::integral_constant<bool, (N > 0)>{});
@ -295,7 +295,7 @@ public:
BOOST_STATIC_STRING_CPP14_CONSTEXPR
basic_static_string&
operator=(
std::initializer_list<CharT> ilist)
std::initializer_list<CharT> ilist) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return assign(ilist);
}
@ -307,7 +307,7 @@ public:
BOOST_STATIC_STRING_CPP14_CONSTEXPR
basic_static_string&
operator=(
string_view_type sv)
string_view_type sv) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return assign(sv);
}
@ -323,7 +323,7 @@ public:
basic_static_string&
assign(
size_type count,
CharT ch);
CharT ch) BOOST_STATIC_STRING_COND_NOEXCEPT;
/** Replace the contents.
@ -347,7 +347,7 @@ public:
BOOST_STATIC_STRING_CPP14_CONSTEXPR
basic_static_string&
assign(
basic_static_string<M, CharT, Traits> const& s)
basic_static_string<M, CharT, Traits> const& s) BOOST_STATIC_STRING_COND_NOEXCEPT
{
// VFALCO this could come in two flavors,
// N>M and N<M, and skip the exception
@ -368,7 +368,7 @@ public:
assign(
basic_static_string<M, CharT, Traits> const& s,
size_type pos,
size_type count = npos);
size_type count = npos) BOOST_STATIC_STRING_COND_NOEXCEPT;
/** Replace the contents.
@ -381,7 +381,7 @@ public:
basic_static_string&
assign(
CharT const* s,
size_type count);
size_type count) BOOST_STATIC_STRING_COND_NOEXCEPT;
/** Replace the contents.
@ -393,7 +393,7 @@ public:
BOOST_STATIC_STRING_CPP14_CONSTEXPR
basic_static_string&
assign(
CharT const* s)
CharT const* s) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return assign(s, Traits::length(s));
}
@ -416,7 +416,7 @@ public:
#endif
assign(
InputIterator first,
InputIterator last);
InputIterator last) BOOST_STATIC_STRING_COND_NOEXCEPT;
/** Replace the contents.
@ -427,7 +427,7 @@ public:
*/
basic_static_string&
assign(
std::initializer_list<CharT> ilist)
std::initializer_list<CharT> ilist) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return assign(ilist.begin(), ilist.end());
}
@ -448,7 +448,7 @@ public:
! std::is_convertible<T, CharT const*>::value,
basic_static_string&>::type
#endif
assign(T const& t)
assign(T const& t) BOOST_STATIC_STRING_COND_NOEXCEPT
{
string_view_type ss{t};
return assign(ss.data(), ss.size());
@ -479,7 +479,7 @@ public:
assign(
T const& t,
size_type pos,
size_type count = npos)
size_type count = npos) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return assign(string_view_type{t}.substr(pos, count));
}
@ -496,7 +496,7 @@ public:
*/
BOOST_STATIC_STRING_CPP14_CONSTEXPR
reference
at(size_type pos);
at(size_type pos) BOOST_STATIC_STRING_COND_NOEXCEPT;
/** Access specified character with bounds checking.
@ -504,7 +504,7 @@ public:
*/
BOOST_STATIC_STRING_CPP14_CONSTEXPR
const_reference
at(size_type pos) const;
at(size_type pos) const BOOST_STATIC_STRING_COND_NOEXCEPT;
/** Access specified character
@ -755,7 +755,7 @@ public:
*/
BOOST_STATIC_STRING_CPP14_CONSTEXPR
void
reserve(std::size_t n);
reserve(std::size_t n) BOOST_STATIC_STRING_COND_NOEXCEPT;
/** Returns the number of characters that can be held in currently allocated storage.
@ -802,7 +802,7 @@ public:
insert(
size_type index,
size_type count,
CharT ch);
CharT ch) BOOST_STATIC_STRING_COND_NOEXCEPT;
/** Insert into the string.
@ -816,7 +816,7 @@ public:
basic_static_string&
insert(
size_type index,
CharT const* s)
CharT const* s) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return insert(index, s, Traits::length(s));
}
@ -836,7 +836,7 @@ public:
insert(
size_type index,
CharT const* s,
size_type count);
size_type count) BOOST_STATIC_STRING_COND_NOEXCEPT;
/** Insert into the string.
@ -852,7 +852,7 @@ public:
basic_static_string&
insert(
size_type index,
string_view_type sv)
string_view_type sv) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return insert(index, sv.data(), sv.size());
}
@ -873,7 +873,7 @@ public:
size_type index,
string_view_type sv,
size_type index_str,
size_type count = npos)
size_type count = npos) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return insert(index, sv.substr(index_str, count));
}
@ -891,7 +891,7 @@ public:
iterator
insert(
const_iterator pos,
CharT ch)
CharT ch) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return insert(pos, 1, ch);
}
@ -910,7 +910,7 @@ public:
insert(
const_iterator pos,
size_type count,
CharT ch);
CharT ch) BOOST_STATIC_STRING_COND_NOEXCEPT;
/** Insert into the string.
@ -935,7 +935,7 @@ public:
insert(
const_iterator pos,
InputIterator first,
InputIterator last);
InputIterator last) BOOST_STATIC_STRING_COND_NOEXCEPT;
/** Insert into the string.
@ -950,7 +950,7 @@ public:
iterator
insert(
const_iterator pos,
std::initializer_list<CharT> ilist)
std::initializer_list<CharT> ilist) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return insert(pos, ilist.begin(), ilist.end());
}
@ -981,7 +981,7 @@ public:
#endif
insert(
size_type index,
T const& t);
T const& t) BOOST_STATIC_STRING_COND_NOEXCEPT;
/** Insert into the string.
@ -1010,7 +1010,7 @@ public:
size_type index,
T const& t,
size_type index_str,
size_type count = npos);
size_type count = npos) BOOST_STATIC_STRING_COND_NOEXCEPT;
/** Removes `min(count, size() - index)` characters starting at `index`
@ -1021,7 +1021,7 @@ public:
basic_static_string&
erase(
size_type index = 0,
size_type count = npos);
size_type count = npos) BOOST_STATIC_STRING_COND_NOEXCEPT;
/** Removes the character at `pos`
@ -1030,7 +1030,7 @@ public:
BOOST_STATIC_STRING_CPP14_CONSTEXPR
iterator
erase(
const_iterator pos);
const_iterator pos) BOOST_STATIC_STRING_COND_NOEXCEPT;
/** Removes the characters in the range `(first, last)`
@ -1040,7 +1040,7 @@ public:
iterator
erase(
const_iterator first,
const_iterator last);
const_iterator last) BOOST_STATIC_STRING_COND_NOEXCEPT;
/** Appends the given character `ch` to the end of the string.
@ -1049,7 +1049,7 @@ public:
BOOST_STATIC_STRING_CPP14_CONSTEXPR
void
push_back(
CharT ch);
CharT ch) BOOST_STATIC_STRING_COND_NOEXCEPT;
/** Removes the last character from the string
@ -1075,7 +1075,7 @@ public:
basic_static_string&
append(
size_type count,
CharT ch)
CharT ch) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return insert(size(), count, ch);
}
@ -1092,7 +1092,7 @@ public:
BOOST_STATIC_STRING_CPP14_CONSTEXPR
basic_static_string&
append(
string_view_type sv)
string_view_type sv) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return append(sv.data(), sv.size());
}
@ -1112,7 +1112,7 @@ public:
append(
string_view_type sv,
size_type pos,
size_type count = npos)
size_type count = npos) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return append(sv.substr(pos, count));
}
@ -1130,7 +1130,7 @@ public:
basic_static_string&
append(
CharT const* s,
size_type count);
size_type count) BOOST_STATIC_STRING_COND_NOEXCEPT;
/** Append to the string.
@ -1145,7 +1145,7 @@ public:
BOOST_STATIC_STRING_CPP14_CONSTEXPR
basic_static_string&
append(
CharT const* s)
CharT const* s) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return append(s, Traits::length(s));
}
@ -1172,7 +1172,7 @@ public:
#endif
append(
InputIterator first,
InputIterator last)
InputIterator last) BOOST_STATIC_STRING_COND_NOEXCEPT
{
insert(end(), first, last);
return *this;
@ -1190,7 +1190,7 @@ public:
BOOST_STATIC_STRING_CPP14_CONSTEXPR
basic_static_string&
append(
std::initializer_list<CharT> ilist)
std::initializer_list<CharT> ilist) BOOST_STATIC_STRING_COND_NOEXCEPT
{
insert(end(), ilist);
return *this;
@ -1221,7 +1221,7 @@ public:
basic_static_string&>::type
#endif
append(
T const& t)
T const& t) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return append(string_view_type{t});
}
@ -1254,7 +1254,7 @@ public:
append(
T const& t,
size_type pos,
size_type count = npos)
size_type count = npos) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return append(string_view_type{t}.substr(pos, count));
}
@ -1267,7 +1267,7 @@ public:
BOOST_STATIC_STRING_CPP14_CONSTEXPR
basic_static_string&
operator+=(
basic_static_string<M, CharT, Traits> const& s)
basic_static_string<M, CharT, Traits> const& s) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return append(s.data(), s.size());
}
@ -1281,7 +1281,7 @@ public:
BOOST_STATIC_STRING_CPP14_CONSTEXPR
basic_static_string&
operator+=(
CharT ch)
CharT ch) BOOST_STATIC_STRING_COND_NOEXCEPT
{
push_back(ch);
return *this;
@ -1300,7 +1300,7 @@ public:
BOOST_STATIC_STRING_CPP14_CONSTEXPR
basic_static_string&
operator+=(
CharT const* s)
CharT const* s) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return append(s);
}
@ -1317,7 +1317,7 @@ public:
BOOST_STATIC_STRING_CPP14_CONSTEXPR
basic_static_string&
operator+=(
std::initializer_list<CharT> ilist)
std::initializer_list<CharT> ilist) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return append(ilist);
}
@ -1344,7 +1344,7 @@ public:
basic_static_string&>::type
#endif
operator+=(
T const& t)
T const& t) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return append(t);
}
@ -1373,7 +1373,7 @@ public:
compare(
size_type pos1,
size_type count1,
basic_static_string<M, CharT, Traits> const& s) const
basic_static_string<M, CharT, Traits> const& s) const BOOST_STATIC_STRING_COND_NOEXCEPT
{
return detail::lexicographical_compare<CharT, Traits>(
subview(pos1, count1), s.data(), s.size());
@ -1393,7 +1393,7 @@ public:
size_type count1,
basic_static_string<M, CharT, Traits> const& s,
size_type pos2,
size_type count2 = npos) const
size_type count2 = npos) const BOOST_STATIC_STRING_COND_NOEXCEPT
{
return detail::lexicographical_compare(
subview(pos1, count1), s.subview(pos2, count2));
@ -1422,7 +1422,7 @@ public:
compare(
size_type pos1,
size_type count1,
CharT const* s) const
CharT const* s) const BOOST_STATIC_STRING_COND_NOEXCEPT
{
return detail::lexicographical_compare<CharT, Traits>(
subview(pos1, count1), s, Traits::length(s));
@ -1438,7 +1438,7 @@ public:
size_type pos1,
size_type count1,
CharT const* s,
size_type count2) const
size_type count2) const BOOST_STATIC_STRING_COND_NOEXCEPT
{
return detail::lexicographical_compare<CharT, Traits>(
subview(pos1, count1), s, count2);
@ -1466,7 +1466,7 @@ public:
compare(
size_type pos1,
size_type count1,
string_view_type s) const
string_view_type s) const BOOST_STATIC_STRING_COND_NOEXCEPT
{
return detail::lexicographical_compare<CharT, Traits>(
subview(pos1, count1), s);
@ -1495,7 +1495,7 @@ public:
size_type count1,
T const& t,
size_type pos2,
size_type count2 = npos) const
size_type count2 = npos) const BOOST_STATIC_STRING_COND_NOEXCEPT
{
return compare(pos1, count1,
string_view_type(t).substr(pos2, count2));
@ -1511,7 +1511,7 @@ public:
basic_static_string
substr(
size_type pos = 0,
size_type count = npos) const;
size_type count = npos) const BOOST_STATIC_STRING_COND_NOEXCEPT;
/** Returns a view of a substring.
@ -1523,7 +1523,7 @@ public:
string_view_type
subview(
size_type pos = 0,
size_type count = npos) const;
size_type count = npos) const BOOST_STATIC_STRING_COND_NOEXCEPT;
/** Copy a substring.
@ -1544,7 +1544,7 @@ public:
BOOST_STATIC_STRING_CPP14_CONSTEXPR
void
resize(
std::size_t n);
std::size_t n) BOOST_STATIC_STRING_COND_NOEXCEPT;
/** Changes the number of characters stored.
@ -1555,7 +1555,7 @@ public:
void
resize(
std::size_t n,
CharT c);
CharT c) BOOST_STATIC_STRING_COND_NOEXCEPT;
/// Exchange the contents of this string with another.
BOOST_STATIC_STRING_CPP14_CONSTEXPR
@ -1568,7 +1568,7 @@ public:
BOOST_STATIC_STRING_CPP14_CONSTEXPR
void
swap(
basic_static_string<M, CharT, Traits>& s);
basic_static_string<M, CharT, Traits>& s) BOOST_STATIC_STRING_COND_NOEXCEPT;
/** Replace a subset of the string.
@ -1584,7 +1584,7 @@ public:
replace(
size_type pos1,
size_type n1,
const basic_static_string<M, CharT, Traits>& str)
const basic_static_string<M, CharT, Traits>& str) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return replace(pos1, n1, str.data(), str.size());
}
@ -1605,7 +1605,7 @@ public:
size_type n1,
const basic_static_string& str,
size_type pos2,
size_type n2 = npos)
size_type n2 = npos) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return replace(pos1, n1, str.subview(pos2, n2));
}
@ -1635,7 +1635,7 @@ public:
replace(
size_type pos1,
size_type n1,
const T& t)
const T& t) BOOST_STATIC_STRING_COND_NOEXCEPT
{
string_view_type sv = t;
return replace(pos1, n1, sv.data(), sv.size());
@ -1669,7 +1669,7 @@ public:
size_type n1,
const T& t,
size_type pos2,
size_type n2 = npos)
size_type n2 = npos) BOOST_STATIC_STRING_COND_NOEXCEPT
{
string_view_type sv = t;
return replace(pos1, n1, sv.substr(pos2, n2));
@ -1689,7 +1689,7 @@ public:
size_type pos,
size_type n1,
const CharT* s,
size_type n2);
size_type n2) BOOST_STATIC_STRING_COND_NOEXCEPT;
/** Replace a subset of the string.
@ -1705,7 +1705,7 @@ public:
replace(
size_type pos,
size_type n1,
const CharT* s)
const CharT* s) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return replace(pos, n1, s, Traits::length(s));
}
@ -1724,7 +1724,7 @@ public:
size_type pos,
size_type n1,
size_type n2,
CharT c);
CharT c) BOOST_STATIC_STRING_COND_NOEXCEPT;
/** Replace a subset of the string.
@ -1739,7 +1739,7 @@ public:
replace(
const_iterator i1,
const_iterator i2,
const basic_static_string& str)
const basic_static_string& str) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return replace(i1, i2, str.data(), str.size());
}
@ -1769,7 +1769,7 @@ public:
replace(
const_iterator i1,
const_iterator i2,
const T& t)
const T& t) BOOST_STATIC_STRING_COND_NOEXCEPT
{
string_view_type sv = t;
return replace(i1 - begin(), i2 - i1, sv.data(), sv.size());
@ -1789,7 +1789,7 @@ public:
const_iterator i1,
const_iterator i2,
const CharT* s,
size_type n)
size_type n) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return replace(i1 - begin(), i2 - i1, s, n);
}
@ -1807,7 +1807,7 @@ public:
replace(
const_iterator i1,
const_iterator i2,
const CharT* s)
const CharT* s) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return replace(i1, i2, s, Traits::length(s));
}
@ -1826,7 +1826,7 @@ public:
const_iterator i1,
const_iterator i2,
size_type n,
CharT c)
CharT c) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return replace(i1 - begin(), i2 - i1, n, c);
}
@ -1852,7 +1852,7 @@ public:
const_iterator i1,
const_iterator i2,
InputIterator j1,
InputIterator j2)
InputIterator j2) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return replace(i1, i2, basic_static_string(j1, j2));
}
@ -1870,7 +1870,7 @@ public:
replace(
const_iterator i1,
const_iterator i2,
std::initializer_list<CharT> il)
std::initializer_list<CharT> il) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return replace(i1, i2, il.begin(), il.size());
}
@ -2421,7 +2421,7 @@ private:
assign_char(CharT ch, std::true_type) noexcept;
basic_static_string&
assign_char(CharT ch, std::false_type);
assign_char(CharT ch, std::false_type) BOOST_STATIC_STRING_COND_NOEXCEPT;
};
//------------------------------------------------------------------------------
@ -2438,7 +2438,7 @@ inline
bool
operator==(
basic_static_string<N, CharT, Traits> const& lhs,
basic_static_string<M, CharT, Traits> const& rhs)
basic_static_string<M, CharT, Traits> const& rhs) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return lhs.compare(rhs) == 0;
}
@ -2451,7 +2451,7 @@ inline
bool
operator!=(
basic_static_string<N, CharT, Traits> const& lhs,
basic_static_string<M, CharT, Traits> const& rhs)
basic_static_string<M, CharT, Traits> const& rhs) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return lhs.compare(rhs) != 0;
}
@ -2464,7 +2464,7 @@ inline
bool
operator<(
basic_static_string<N, CharT, Traits> const& lhs,
basic_static_string<M, CharT, Traits> const& rhs)
basic_static_string<M, CharT, Traits> const& rhs) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return lhs.compare(rhs) < 0;
}
@ -2477,7 +2477,7 @@ inline
bool
operator<=(
basic_static_string<N, CharT, Traits> const& lhs,
basic_static_string<M, CharT, Traits> const& rhs)
basic_static_string<M, CharT, Traits> const& rhs) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return lhs.compare(rhs) <= 0;
}
@ -2490,7 +2490,7 @@ inline
bool
operator>(
basic_static_string<N, CharT, Traits> const& lhs,
basic_static_string<M, CharT, Traits> const& rhs)
basic_static_string<M, CharT, Traits> const& rhs) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return lhs.compare(rhs) > 0;
}
@ -2503,7 +2503,7 @@ inline
bool
operator>=(
basic_static_string<N, CharT, Traits> const& lhs,
basic_static_string<M, CharT, Traits> const& rhs)
basic_static_string<M, CharT, Traits> const& rhs) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return lhs.compare(rhs) >= 0;
}
@ -2514,7 +2514,7 @@ inline
bool
operator==(
CharT const* lhs,
basic_static_string<N, CharT, Traits> const& rhs)
basic_static_string<N, CharT, Traits> const& rhs) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return detail::lexicographical_compare<CharT, Traits>(
lhs, Traits::length(lhs),
@ -2527,7 +2527,7 @@ inline
bool
operator==(
basic_static_string<N, CharT, Traits> const& lhs,
CharT const* rhs)
CharT const* rhs) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return detail::lexicographical_compare<CharT, Traits>(
lhs.data(), lhs.size(),
@ -2540,7 +2540,7 @@ inline
bool
operator!=(
CharT const* lhs,
basic_static_string<N, CharT, Traits> const& rhs)
basic_static_string<N, CharT, Traits> const& rhs) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return detail::lexicographical_compare<CharT, Traits>(
lhs, Traits::length(lhs),
@ -2553,7 +2553,7 @@ inline
bool
operator!=(
basic_static_string<N, CharT, Traits> const& lhs,
CharT const* rhs)
CharT const* rhs) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return detail::lexicographical_compare<CharT, Traits>(
lhs.data(), lhs.size(),
@ -2566,7 +2566,7 @@ inline
bool
operator<(
CharT const* lhs,
basic_static_string<N, CharT, Traits> const& rhs)
basic_static_string<N, CharT, Traits> const& rhs) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return detail::lexicographical_compare<CharT, Traits>(
lhs, Traits::length(lhs),
@ -2579,7 +2579,7 @@ inline
bool
operator<(
basic_static_string<N, CharT, Traits> const& lhs,
CharT const* rhs)
CharT const* rhs) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return detail::lexicographical_compare<CharT, Traits>(
lhs.data(), lhs.size(),
@ -2592,7 +2592,7 @@ inline
bool
operator<=(
CharT const* lhs,
basic_static_string<N, CharT, Traits> const& rhs)
basic_static_string<N, CharT, Traits> const& rhs) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return detail::lexicographical_compare<CharT, Traits>(
lhs, Traits::length(lhs),
@ -2605,7 +2605,7 @@ inline
bool
operator<=(
basic_static_string<N, CharT, Traits> const& lhs,
CharT const* rhs)
CharT const* rhs) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return detail::lexicographical_compare<CharT, Traits>(
lhs.data(), lhs.size(),
@ -2618,7 +2618,7 @@ inline
bool
operator>(
CharT const* lhs,
basic_static_string<N, CharT, Traits> const& rhs)
basic_static_string<N, CharT, Traits> const& rhs) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return detail::lexicographical_compare<CharT, Traits>(
lhs, Traits::length(lhs),
@ -2631,7 +2631,7 @@ inline
bool
operator>(
basic_static_string<N, CharT, Traits> const& lhs,
CharT const* rhs)
CharT const* rhs) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return detail::lexicographical_compare<CharT, Traits>(
lhs.data(), lhs.size(),
@ -2644,7 +2644,7 @@ inline
bool
operator>=(
CharT const* lhs,
basic_static_string<N, CharT, Traits> const& rhs)
basic_static_string<N, CharT, Traits> const& rhs) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return detail::lexicographical_compare<CharT, Traits>(
lhs, Traits::length(lhs),
@ -2657,7 +2657,7 @@ inline
bool
operator>=(
basic_static_string<N, CharT, Traits> const& lhs,
CharT const* rhs)
CharT const* rhs) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return detail::lexicographical_compare<CharT, Traits>(
lhs.data(), lhs.size(),
@ -2672,7 +2672,7 @@ inline
basic_static_string<N + M, CharT, Traits>
operator+(
basic_static_string<N, CharT, Traits>const& lhs,
basic_static_string<M, CharT, Traits>const& rhs)
basic_static_string<M, CharT, Traits>const& rhs) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return basic_static_string<N + M, CharT, Traits>(lhs) += rhs;
}
@ -2683,7 +2683,7 @@ inline
basic_static_string<N + 1, CharT, Traits>
operator+(
basic_static_string<N, CharT, Traits> const& lhs,
CharT rhs)
CharT rhs) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return basic_static_string<N + 1, CharT, Traits>(lhs) += rhs;
}
@ -2694,7 +2694,7 @@ inline
basic_static_string<N + 1, CharT, Traits>
operator+(
CharT lhs,
basic_static_string<N, CharT, Traits> const& rhs)
basic_static_string<N, CharT, Traits> const& rhs) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return basic_static_string<N + 1, CharT, Traits>(rhs).insert(0, lhs);
}
@ -2707,7 +2707,7 @@ inline
basic_static_string<N + M, CharT, Traits>
operator+(
basic_static_string<N, CharT, Traits>const& lhs,
const CharT(&rhs)[M])
const CharT(&rhs)[M]) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return basic_static_string<N + M, CharT, Traits>(lhs).append(+rhs, M);
}
@ -2720,7 +2720,7 @@ inline
basic_static_string<N + M, CharT, Traits>
operator+(
const CharT(&lhs)[N],
basic_static_string<M, CharT, Traits>const& rhs)
basic_static_string<M, CharT, Traits>const& rhs) BOOST_STATIC_STRING_COND_NOEXCEPT
{
return basic_static_string<N + M, CharT, Traits>(rhs).insert(0, +rhs, N);
}
@ -2740,7 +2740,7 @@ inline
void
swap(
basic_static_string<N, CharT, Traits>& lhs,
basic_static_string<N, CharT, Traits>& rhs)
basic_static_string<N, CharT, Traits>& rhs) BOOST_STATIC_STRING_COND_NOEXCEPT
{
lhs.swap(rhs);
}
@ -2753,7 +2753,7 @@ inline
void
swap(
basic_static_string<N, CharT, Traits>& lhs,
basic_static_string<M, CharT, Traits>& rhs)
basic_static_string<M, CharT, Traits>& rhs) BOOST_STATIC_STRING_COND_NOEXCEPT
{
lhs.swap(rhs);
}
@ -2801,77 +2801,77 @@ using static_u32string = basic_static_string<N, char32_t>;
static_string<std::numeric_limits<int>::digits10 + 1>
inline
to_static_string(int value);
to_static_string(int value) BOOST_STATIC_STRING_COND_NOEXCEPT;
static_string<std::numeric_limits<long>::digits10 + 1>
inline
to_static_string(long value);
to_static_string(long value)BOOST_STATIC_STRING_COND_NOEXCEPT;
static_string<std::numeric_limits<long long>::digits10 + 1>
inline
to_static_string(long long value);
to_static_string(long long value)BOOST_STATIC_STRING_COND_NOEXCEPT;
static_string<std::numeric_limits<unsigned int>::digits10 + 1>
inline
to_static_string(unsigned int value);
to_static_string(unsigned int value) BOOST_STATIC_STRING_COND_NOEXCEPT;
static_string<std::numeric_limits<unsigned long>::digits10 + 1>
inline
to_static_string(unsigned long value);
to_static_string(unsigned long value) BOOST_STATIC_STRING_COND_NOEXCEPT;
static_string<std::numeric_limits<unsigned long long>::digits10 + 1>
inline
to_static_string(unsigned long long value);
to_static_string(unsigned long long value) BOOST_STATIC_STRING_COND_NOEXCEPT;
static_string<std::numeric_limits<float>::max_digits10 + 1>
inline
to_static_string(float value);
to_static_string(float value) BOOST_STATIC_STRING_COND_NOEXCEPT;
static_string<std::numeric_limits<double>::max_digits10 + 1>
inline
to_static_string(double value);
to_static_string(double value) BOOST_STATIC_STRING_COND_NOEXCEPT;
static_string<std::numeric_limits<long double>::max_digits10 + 1>
inline
to_static_string(long double value);
to_static_string(long double value) BOOST_STATIC_STRING_COND_NOEXCEPT;
// wstring
static_wstring<std::numeric_limits<int>::digits10 + 1>
inline
to_static_wstring(int value);
to_static_wstring(int value) BOOST_STATIC_STRING_COND_NOEXCEPT;
static_wstring<std::numeric_limits<long>::digits10 + 1>
inline
to_static_wstring(long value);
to_static_wstring(long value) BOOST_STATIC_STRING_COND_NOEXCEPT;
static_wstring<std::numeric_limits<long long>::digits10 + 1>
inline
to_static_wstring(long long value);
to_static_wstring(long long value) BOOST_STATIC_STRING_COND_NOEXCEPT;
static_wstring<std::numeric_limits<unsigned int>::digits10 + 1>
inline
to_static_wstring(unsigned int value);
to_static_wstring(unsigned int value) BOOST_STATIC_STRING_COND_NOEXCEPT;
static_wstring<std::numeric_limits<unsigned long>::digits10 + 1>
inline
to_static_wstring(unsigned long value);
to_static_wstring(unsigned long value) BOOST_STATIC_STRING_COND_NOEXCEPT;
static_wstring<std::numeric_limits<unsigned long long>::digits10 + 1>
inline
to_static_wstring(unsigned long long value);
to_static_wstring(unsigned long long value) BOOST_STATIC_STRING_COND_NOEXCEPT;
static_wstring<std::numeric_limits<float>::max_digits10 + 1>
inline
to_static_wstring(float value);
to_static_wstring(float value) BOOST_STATIC_STRING_COND_NOEXCEPT;
static_wstring<std::numeric_limits<double>::max_digits10 + 1>
inline
to_static_wstring(double value);
to_static_wstring(double value) BOOST_STATIC_STRING_COND_NOEXCEPT;
static_wstring<std::numeric_limits<long double>::max_digits10 + 1>
inline
to_static_wstring(long double value);
to_static_wstring(long double value) BOOST_STATIC_STRING_COND_NOEXCEPT;
//------------------------------------------------------------------------------
//
@ -2903,12 +2903,11 @@ hash_value(
return boost::hash_range(str.begin(), str.end());
}
#endif
} // static_string
} // boost
#ifndef GENERATING_DOCUMENTATION
// std::hash partial specialization for basic_static_string
#endif
namespace std
{
template <std::size_t N, typename CharT, typename Traits>