]> git.ipfire.org Git - thirdparty/gcc.git/commit
PR libstdc++/90165 constrain variant(T&&) constructor
authorredi <redi@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 23 Apr 2019 12:48:18 +0000 (12:48 +0000)
committerredi <redi@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 23 Apr 2019 12:48:18 +0000 (12:48 +0000)
commit28cc38ec11e946f47e3ba8f149f44652e0d98ab1
treec0de0775fe9a41f20b60738dd6b7b1f4415ea0e6
parentb48cc8c574faddec7ec75f215fb11ca94e08e08d
PR libstdc++/90165 constrain variant(T&&) constructor

Also refactor some constraints slightly to be more readable.

PR libstdc++/90165
* include/std/variant (variant::__not_self): New helper for the
is_same_v<remove_cvref_t<T>, variant>==false constraints.
(variant::__to_type_impl): Remove.
(variant::__to_type): Add default argument to check pack size, instead
of using __to_type_impl.
(variant::__accepted_type): Add default argument using __not_self.
(variant::__is_in_place_tag, variant::__not_in_place_tag): New helpers
for variant(T&&) constructor constraint.
(variant::variant(T&&)): Use __not_in_place_tag in constraints.
Extract __accepted_type into a named template parameter for reuse in
other constraints and in the exception specification.
(variant::variant(in_place_type_t<T>, Args&&...))
(variant::variant(in_place_type_t<T>, initializer_list<U>, Args&&...))
(variant::variant(in_place_index_t<T>, Args&&...))
(variant::variant(in_place_index_t<T>, initializer_list<U>, Args&&...))
(variant::operator=T&&)): Remove redundant && from trait arguments.
* testsuite/20_util/variant/compile.cc: Check variant(T&&) constructor
isn't used for in_place_type or in_place_index arguments.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@270509 138bc75d-0d04-0410-961f-82ee72b054a4
libstdc++-v3/ChangeLog
libstdc++-v3/include/std/variant
libstdc++-v3/testsuite/20_util/variant/compile.cc