Make STL components not dependent on is_trivial(_v)
#5202
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Towards #5137/WG21-P3247R2. IMO most related changes should be done for older modes. libstdc++ is already doing so.
Product code
basic_string
: There requirements seem to be slightly strengthened, but I don't believe a "character-like type" with a private default constructor can ever be supported.basic_string_view
, it seems that "character-like type" with a private default constructor can be supported. I'm not sure whether it should be changed._Can_memcpy_val
: Trivial default-constructibility is not actually requried, so I just relax the condition tois_trivially_copyable_v
._Uninitialized_copy_multidimensional(_al)
: Like above, but the dispatching condition should be more precise._Circular_buffer
:static_assert
doesn't seem necessary as the involved types are either scalar or implementation-controlled, but the checks seem desired to avoid regression._Unaligned_load
: The function template is used and instantiated only once, so I think it's better to inline it into the caller.Test code
is_trivially_copyable_v
&is_trivially_default_constructible_v
" is slight stronger than "is_trivial_v
", I decide to use the former style thoroughly except whenis_trivial(_v)
themselves are tested.