[Patch] Forward triviality in variant
Jonathan Wakely
jwakely@redhat.com
Thu Jun 1 15:29:00 GMT 2017
On 01/06/17 18:21 +0300, Ville Voutilainen wrote:
>On 1 June 2017 at 18:13, Jonathan Wakely <jwakely@redhat.com> wrote:
>> On 30/05/17 02:16 -0700, Tim Shen via libstdc++ wrote:
>>>
>>> diff --git a/libstdc++-v3/include/std/variant
>>> b/libstdc++-v3/include/std/variant
>>> index b9824a5182c..f81b815af09 100644
>>> --- a/libstdc++-v3/include/std/variant
>>> +++ b/libstdc++-v3/include/std/variant
>>> @@ -290,6 +290,53 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>>> __ref_cast<_Tp>(__t));
>>> }
>>>
>>> + template<typename... _Types>
>>> + struct _Traits
>>> + {
>>> + static constexpr bool is_default_constructible_v =
>>> + is_default_constructible_v<typename _Nth_type<0,
>>> _Types...>::type>;
>>> + static constexpr bool is_copy_constructible_v =
>>> + __and_<is_copy_constructible<_Types>...>::value;
>>> + static constexpr bool is_move_constructible_v =
>>> + __and_<is_move_constructible<_Types>...>::value;
>>> + static constexpr bool is_copy_assignable_v =
>>> + is_copy_constructible_v && is_move_constructible_v
>>> + && __and_<is_copy_assignable<_Types>...>::value;
>>> + static constexpr bool is_move_assignable_v =
>>> + is_move_constructible_v
>>> + && __and_<is_move_assignable<_Types>...>::value;
>>
>>
>> It seems strange to me that these ones end with _v but the following
>> ones don't. Could we make them all have no _v suffix?
>
>Seems to me worth considering to rather make all of them have a _v suffix. :)
>>
>>> + static constexpr bool is_dtor_trivial =
>>> + __and_<is_trivially_destructible<_Types>...>::value;
>
>
>They all seem to be shortcuts for something::value, so it seems to me
>logical to have
>them all be _v.
The _v suffixes in the standard are there to distinguish std::foo from
std::foo_v, but we don't have that problem.
__variant::_Traits<T...>::foo is a unique name, we don't need the
suffix, it's just noise.
More information about the Libstdc++
mailing list