]> git.ipfire.org Git - thirdparty/gcc.git/commit
c++: Reject alias CTAD in C++17 [PR99008]
authorPatrick Palka <ppalka@redhat.com>
Tue, 13 Apr 2021 16:35:33 +0000 (12:35 -0400)
committerPatrick Palka <ppalka@redhat.com>
Tue, 13 Apr 2021 16:35:33 +0000 (12:35 -0400)
commit8913b2c2bcded39427ff27e6dfc276ae8555f6b8
tree41f41a744c09f93171b86d5a51bf2815ce7a2c96
parent989e512f719a44fafca0030d7b8a1f5bf5f1baf7
c++: Reject alias CTAD in C++17 [PR99008]

Here, in C++17 mode, we only pedwarn about the use of alias CTAD and
then later ICE from alias_ctad_tweaks when attempting to constrain
the guides.  Since the construction of the guides of an alias template
effectively relies on concepts, we shouldn't be permissive about alias
CTAD in C++17 mode, so this patch turns the pertinent pedwarn in
do_class_deduction into an error.

In order to get a consistent diagnostic for B() vs the other forms in
the added testcase, I had to remove the special handling of CTAD with
empty initializer in build_functional_cast_1 so that we always pass
'complain' to do_auto_deduction.

gcc/cp/ChangeLog:

PR c++/99008
* pt.c (do_class_deduction): Reject alias CTAD in C++17 mode
rather than issuing a pedwarn.
* typeck2.c (build_functional_cast_1): Handle CTAD uniformly
for consistent diagnostics.

gcc/testsuite/ChangeLog:

PR c++/99008
* g++.dg/parse/template2.C: Adjust expected diagnostic.
* g++.dg/template/error8.C: Likewise.
* g++.dg/cpp1z/class-deduction84.C: New test.
gcc/cp/pt.c
gcc/cp/typeck2.c
gcc/testsuite/g++.dg/cpp1z/class-deduction84.C [new file with mode: 0644]
gcc/testsuite/g++.dg/parse/template2.C
gcc/testsuite/g++.dg/template/error8.C