mirror of
https://github.com/boostorg/static_string.git
synced 2026-01-19 04:42:12 +00:00
Make static_string trivially copyable
This commit is contained in:
committed by
Gennaro Prota
parent
cd546285c4
commit
37a557d937
@@ -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.
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user