From: Jason Merrill Date: Tue, 10 Mar 2015 17:44:48 +0000 (-0400) Subject: re PR c++/65333 (error: incomplete type used in nested name specifier) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a4d66d7dc7a140adf8d2bfb87d4d6354abc7b340;p=gcc.git re PR c++/65333 (error: incomplete type used in nested name specifier) PR c++/65333 DR 1558 * pt.c (dependent_type_p_r): Check both class and alias template args. From-SVN: r221328 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index d354e07d279..61c0b18e5ea 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2015-03-10 Jason Merrill + + PR c++/65333 + DR 1558 + * pt.c (dependent_type_p_r): Check both class and alias template args. + 2015-03-10 Jakub Jelinek PR c/65120 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 9a00d0d30e6..ea826211996 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -20930,7 +20930,13 @@ dependent_type_p_r (tree type) return true; /* ... or any of the template arguments is a dependent type or an expression that is type-dependent or value-dependent. */ - else if (TYPE_TEMPLATE_INFO (type) + else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type) + && (any_dependent_template_arguments_p + (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type))))) + return true; + /* For an alias template specialization, check the arguments both to the + class template and the alias template. */ + else if (alias_template_specialization_p (type) && (any_dependent_template_arguments_p (INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (type))))) return true; diff --git a/gcc/testsuite/g++.dg/cpp0x/alias-decl-47.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-47.C new file mode 100644 index 00000000000..71611db42cc --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/alias-decl-47.C @@ -0,0 +1,13 @@ +// PR c++/65333 +// { dg-do compile { target c++11 } } + +template struct A +{ + using type = int; + template using array = A; + void + m_fn1 () + { + array<>::data; + } +};