aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vect-loop.c
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2021-11-03 00:21:38 +0000
committerJonathan Wakely <jwakely@redhat.com>2021-11-04 09:36:09 +0000
commit30ab6d9e435dd3158d971cf9353eec8009955cb3 (patch)
treea483e4c14e3171d5d69910e4e4941f6bcf041a50 /gcc/tree-vect-loop.c
parent7551a9957437f20254be41d396962b9ccc46cee6 (diff)
downloadgcc-30ab6d9e435dd3158d971cf9353eec8009955cb3.zip
gcc-30ab6d9e435dd3158d971cf9353eec8009955cb3.tar.gz
gcc-30ab6d9e435dd3158d971cf9353eec8009955cb3.tar.bz2
libstdc++: Optimize std::variant traits and improve diagnostics
By defining additional partial specializations of _Nth_type we can reduce the number of recursive instantiations needed to get from N to 0. We can also use _Nth_type in variant_alternative, to take advantage of that new optimization. By adding a static_assert to variant_alternative we get a nicer error than 'invalid use of incomplete type'. By defining partial specializations of std::variant_size_v for the common case we can avoid instantiating the std::variant_size class template. The __tuple_count class template and __tuple_count_v variable template can be simplified to a single variable template, __count. By adding a deleted constructor to the _Variant_union primary template we can (very slightly) improve diagnostics for invalid attempts to construct a std::variant with an out-of-range index. Instead of a confusing error about "too many initializers for ..." we get a call to a deleted function. By using _Nth_type instead of variant_alternative (for cv-unqualified variant types) we avoid instantiating variant_alternative. By adding deleted overloads of variant::emplace we get better diagnostics for emplace<invalid-index> or emplace<invalid-type>. Instead of getting errors explaining why each of the four overloads wasn't valid, we just get one error about calling a deleted function. libstdc++-v3/ChangeLog: * include/std/variant (_Nth_type): Define partial specializations to reduce number of instantiations. (variant_size_v): Define partial specializations to avoid instantiations. (variant_alternative): Use _Nth_type. Add static assert. (__tuple_count, __tuple_count_v): Replace with ... (__count): New variable template. (_Variant_union): Add deleted constructor. (variant::__to_type): Use _Nth_type. (variant::emplace): Use _Nth_type. Add deleted overloads for invalid types and indices.
Diffstat (limited to 'gcc/tree-vect-loop.c')
0 files changed, 0 insertions, 0 deletions