Skip to content

Commit 11781aa

Browse files
committed
Make static_string trivially copyable
1 parent bff5cb6 commit 11781aa

File tree

2 files changed

+41
-10
lines changed

2 files changed

+41
-10
lines changed

include/boost/static_string/static_string.hpp

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1093,11 +1093,7 @@ class basic_static_string
10931093
10941094
Copy constructor.
10951095
*/
1096-
BOOST_STATIC_STRING_CPP14_CONSTEXPR
1097-
basic_static_string(const basic_static_string& other) noexcept
1098-
{
1099-
assign(other);
1100-
}
1096+
basic_static_string(const basic_static_string& other) = default;
11011097

11021098
/** Constructor.
11031099
@@ -1185,12 +1181,8 @@ class basic_static_string
11851181
11861182
@throw std::length_error `s.size() > max_size()`.
11871183
*/
1188-
BOOST_STATIC_STRING_CPP14_CONSTEXPR
11891184
basic_static_string&
1190-
operator=(const basic_static_string& s)
1191-
{
1192-
return assign(s);
1193-
}
1185+
operator=(const basic_static_string& s) = default;
11941186

11951187
/** Assign to the string.
11961188

test/static_string.cpp

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,43 @@ testTWS(Arithmetic value, const wchar_t* wstr_expected = L"", bool test_expected
295295
}
296296
}
297297

298+
// done
299+
static
300+
void
301+
testTypeTraits()
302+
{
303+
{
304+
using S = static_string<1>;
305+
static_assert(std::is_trivially_copyable<S>::value, "");
306+
static_assert(!std::is_trivially_default_constructible<S>::value, "");
307+
static_assert(std::is_trivially_copy_constructible<S>::value, "");
308+
static_assert(std::is_trivially_move_constructible<S>::value, "");
309+
static_assert(std::is_trivially_copy_assignable<S>::value, "");
310+
static_assert(std::is_trivially_move_assignable<S>::value, "");
311+
static_assert(std::is_trivially_destructible<S>::value, "");
312+
}
313+
{
314+
using S = static_string<2>;
315+
static_assert(std::is_trivially_copyable<S>::value, "");
316+
static_assert(!std::is_trivially_default_constructible<S>::value, "");
317+
static_assert(std::is_trivially_copy_constructible<S>::value, "");
318+
static_assert(std::is_trivially_move_constructible<S>::value, "");
319+
static_assert(std::is_trivially_copy_assignable<S>::value, "");
320+
static_assert(std::is_trivially_move_assignable<S>::value, "");
321+
static_assert(std::is_trivially_destructible<S>::value, "");
322+
}
323+
{
324+
using S = static_string<3>;
325+
static_assert(std::is_trivially_copyable<S>::value, "");
326+
static_assert(!std::is_trivially_default_constructible<S>::value, "");
327+
static_assert(std::is_trivially_copy_constructible<S>::value, "");
328+
static_assert(std::is_trivially_move_constructible<S>::value, "");
329+
static_assert(std::is_trivially_copy_assignable<S>::value, "");
330+
static_assert(std::is_trivially_move_assignable<S>::value, "");
331+
static_assert(std::is_trivially_destructible<S>::value, "");
332+
}
333+
}
334+
298335
// done
299336
static
300337
void
@@ -7461,6 +7498,8 @@ runTests()
74617498
constexpr auto cxper = testConstantEvaluation();
74627499
static_cast<void>(cxper);
74637500

7501+
testTypeTraits();
7502+
74647503
testConstruct();
74657504

74667505
testAssignment();

0 commit comments

Comments
 (0)