aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/cp/parser.c1
-rw-r--r--gcc/testsuite/g++.dg/cpp1z/class-deduction75.C15
2 files changed, 16 insertions, 0 deletions
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index 274797f..b0d5c69 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -20790,6 +20790,7 @@ cp_parser_init_declarator (cp_parser* parser,
{
/* Handle C++17 deduction guides. */
if (!decl_specifiers->type
+ && !decl_specifiers->any_type_specifiers_p
&& ctor_dtor_or_conv_p <= 0
&& cxx_dialect >= cxx17)
{
diff --git a/gcc/testsuite/g++.dg/cpp1z/class-deduction75.C b/gcc/testsuite/g++.dg/cpp1z/class-deduction75.C
new file mode 100644
index 0000000..52e6131
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1z/class-deduction75.C
@@ -0,0 +1,15 @@
+// PR c++/97663
+
+template <class T> struct foo {};
+template <class T> struct bar {};
+template <class T> struct baz {};
+template <class T> struct qux {};
+template <class T> struct corge {};
+
+namespace N {
+ unsigned foo ();
+ signed bar ();
+ long baz ();
+ long long qux ();
+ short corge ();
+}