Fix operator+ for non-full arrays

This commit is contained in:
Krystian Stasiowski
2020-03-06 22:26:06 -05:00
parent 2584ab2400
commit 5934a28124
2 changed files with 27 additions and 11 deletions

View File

@ -5544,36 +5544,34 @@ operator+(
std::size_t(0), 1, lhs);
}
// Add a null-terminated character array to a string.
// Add a null terminated character array to a string.
template<
std::size_t N, std::size_t M,
typename CharT, typename Traits>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
inline
basic_static_string<(N + M) - 1, CharT, Traits>
basic_static_string<N + M, CharT, Traits>
operator+(
const basic_static_string<N, CharT, Traits>& lhs,
const CharT(&rhs)[M])
{
// Subtract 1 to account for the null terminator, as "hello" is a char[6]
return basic_static_string<(N + M) - 1, CharT, Traits>(lhs).append(+rhs, M - 1);
return basic_static_string<N + M, CharT, Traits>(lhs).append(+rhs);
}
// Add a string to a null-terminated character array.
// Add a string to a null terminated character array.
template<
std::size_t N, std::size_t M,
typename CharT, typename Traits>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
inline
basic_static_string<(N + M) - 1, CharT, Traits>
basic_static_string<N + M, CharT, Traits>
operator+(
const CharT(&lhs)[N],
const basic_static_string<M, CharT, Traits>& rhs)
{
// Subtract 1 to account for the null terminator, as "hello" is a char[6]
// The cast to std::size_t is needed here since 0 is a null pointer constant
return basic_static_string<(N + M) - 1, CharT, Traits>(rhs).insert(
std::size_t(0), +lhs, N - 1);
return basic_static_string<N + M, CharT, Traits>(rhs).insert(
std::size_t(0), +lhs);
}
//------------------------------------------------------------------------------