Make static_string trivially copyable

This commit is contained in:
Arthur O'Dwyer
2024-03-20 16:42:01 -04:00
committed by Gennaro Prota
parent cd546285c4
commit 37a557d937
2 changed files with 51 additions and 10 deletions

View File

@@ -1093,11 +1093,7 @@ public:
Copy constructor.
*/
BOOST_STATIC_STRING_CPP14_CONSTEXPR
basic_static_string(const basic_static_string& other) noexcept
{
assign(other);
}
basic_static_string(const basic_static_string& other) = default;
/** Constructor.
@@ -1185,12 +1181,8 @@ public:
@throw std::length_error `s.size() > max_size()`.
*/
BOOST_STATIC_STRING_CPP14_CONSTEXPR
basic_static_string&
operator=(const basic_static_string& s)
{
return assign(s);
}
operator=(const basic_static_string& s) = default;
/** Assign to the string.

View File

@@ -301,6 +301,53 @@ testTWS(Arithmetic value, const wchar_t* wstr_expected = nullptr)
}
}
// done
static
void
testTypeTraits()
{
{
using S = static_string<0>;
static_assert(std::is_trivially_copyable<S>::value, "");
static_assert(!std::is_trivially_default_constructible<S>::value, "");
static_assert(std::is_trivially_copy_constructible<S>::value, "");
static_assert(std::is_trivially_move_constructible<S>::value, "");
static_assert(std::is_trivially_copy_assignable<S>::value, "");
static_assert(std::is_trivially_move_assignable<S>::value, "");
static_assert(std::is_trivially_destructible<S>::value, "");
}
{
using S = static_string<1>;
static_assert(std::is_trivially_copyable<S>::value, "");
static_assert(!std::is_trivially_default_constructible<S>::value, "");
static_assert(std::is_trivially_copy_constructible<S>::value, "");
static_assert(std::is_trivially_move_constructible<S>::value, "");
static_assert(std::is_trivially_copy_assignable<S>::value, "");
static_assert(std::is_trivially_move_assignable<S>::value, "");
static_assert(std::is_trivially_destructible<S>::value, "");
}
{
using S = static_string<20>;
static_assert(std::is_trivially_copyable<S>::value, "");
static_assert(!std::is_trivially_default_constructible<S>::value, "");
static_assert(std::is_trivially_copy_constructible<S>::value, "");
static_assert(std::is_trivially_move_constructible<S>::value, "");
static_assert(std::is_trivially_copy_assignable<S>::value, "");
static_assert(std::is_trivially_move_assignable<S>::value, "");
static_assert(std::is_trivially_destructible<S>::value, "");
}
{
using S = static_string<400>;
static_assert(std::is_trivially_copyable<S>::value, "");
static_assert(!std::is_trivially_default_constructible<S>::value, "");
static_assert(std::is_trivially_copy_constructible<S>::value, "");
static_assert(std::is_trivially_move_constructible<S>::value, "");
static_assert(std::is_trivially_copy_assignable<S>::value, "");
static_assert(std::is_trivially_move_assignable<S>::value, "");
static_assert(std::is_trivially_destructible<S>::value, "");
}
}
// done
static
void
@@ -7467,6 +7514,8 @@ runTests()
constexpr auto cxper = testConstantEvaluation();
static_cast<void>(cxper);
testTypeTraits();
testConstruct();
testAssignment();