https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102820

--- Comment #3 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jakub Jelinek <ja...@gcc.gnu.org>:

https://gcc.gnu.org/g:eca767aa51d1f69614222ceb130ca6bb07713232

commit r12-4782-geca767aa51d1f69614222ceb130ca6bb07713232
Author: Jakub Jelinek <ja...@redhat.com>
Date:   Fri Oct 29 09:28:32 2021 +0200

    c++: Implement DR2351 - void{} [PR102820]

    Here is an implementation of DR2351 - void{} - where void{} after
    pack expansion is considered valid and the same thing as void().
    For templates, if CONSTRUCTOR_NELTS is 0, the CONSTRUCTOR is not dependent
    and we can return void_node right away, if it is dependent and contains
    only packs, then it is potentially zero element and so we need to build
    CONSTRUCTOR_IS_DEPENDENT CONSTRUCTOR, while if it contains any non-pack
    elts, we can diagnose it right away.

    2021-10-29  Jakub Jelinek  <ja...@redhat.com>

            PR c++/102820
            * semantics.c (maybe_zero_constructor_nelts): New function.
            (finish_compound_literal): Implement DR2351 - void{}.
            If type is cv void and compound_literal has no elements, return
            void_node.  If type is cv void and compound_literal might have no
            elements after expansion, handle it like other dependent compound
            literals.

            * g++.dg/cpp0x/dr2351.C: New test.

Reply via email to