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] [section Design]
The over-arching design goal is to resemble the interface and behavior of 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 `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 algorithms which throw exceptions provide the strong exception safety
guarantee. This is intended to be a drop in replacement for `std::string`. 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. 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 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` 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 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 of `std::string`.
would be possible, due to the difficulty in determining the size of the resulting `static_string`.
[endsect] [endsect]
@ -89,8 +98,7 @@ would be possible, due to the difficulty in determining the size of the resultin
[section Iterators] [section Iterators]
The iterator invalidation rules are different than those for `std::string`, The iterator invalidation rules differ from those of `std::string`:
since:
* Moving a string invalidates all iterators * Moving a string invalidates all iterators
* Swapping two strings 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] [section:ref Reference]
[include reference.qbk] [include reference.qbk]
[endsect] [endsect]

View File

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

View File

@ -167,6 +167,7 @@ private:
template<typename CharT, typename Traits> template<typename CharT, typename Traits>
constexpr CharT static_string_base_zero<0, CharT, Traits>::null_; 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 // Optimization for storing the size in the last element
template<std::size_t N, typename CharT, typename Traits> template<std::size_t N, typename CharT, typename Traits>
class static_string_base_null class static_string_base_null
@ -219,6 +220,7 @@ public:
CharT data_[N + 1]{0}; CharT data_[N + 1]{0};
#endif #endif
}; };
#endif
// Decides which size optimization to use // Decides which size optimization to use
// If the size is zero, the object will have no members // If the size is zero, the object will have no members
@ -303,40 +305,40 @@ template<typename Traits, typename Integer>
inline inline
char* char*
integer_to_string( integer_to_string(
char* str_end, Integer value, std::true_type) char* str_end, Integer value, std::true_type)
{ {
if (value == 0) if (value == 0)
{ {
Traits::assign(*--str_end, '0'); Traits::assign(*--str_end, '0');
return str_end;
}
if (value < 0)
{
value = -value;
for(; value > 0; value /= 10)
Traits::assign(*--str_end, "0123456789"[value % 10]);
Traits::assign(*--str_end, '-');
return str_end;
}
for (; value > 0; value /= 10)
Traits::assign(*--str_end, "0123456789"[value % 10]);
return str_end; return str_end;
}
if (value < 0)
{
value = -value;
for (; value > 0; value /= 10)
Traits::assign(*--str_end, "0123456789"[value % 10]);
Traits::assign(*--str_end, '-');
return str_end;
}
for (; value > 0; value /= 10)
Traits::assign(*--str_end, "0123456789"[value % 10]);
return str_end;
} }
template<typename Traits, typename Integer> template<typename Traits, typename Integer>
inline inline
char* char*
integer_to_string( integer_to_string(
char* str_end, Integer value, std::false_type) char* str_end, Integer value, std::false_type)
{ {
if (value == 0) if (value == 0)
{ {
Traits::assign(*--str_end, '0'); Traits::assign(*--str_end, '0');
return str_end;
}
for (; value > 0; value /= 10)
Traits::assign(*--str_end, "0123456789"[value % 10]);
return str_end; return str_end;
}
for (; value > 0; value /= 10)
Traits::assign(*--str_end, "0123456789"[value % 10]);
return str_end;
} }
template<typename Traits, typename Integer> template<typename Traits, typename Integer>

View File

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

View File

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