Skip to content
Snippets Groups Projects
Commit 8913b2c2 authored by Patrick Palka's avatar Patrick Palka
Browse files

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.
parent 989e512f
No related branches found
No related tags found
No related merge requests found
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment