Commit 26863a32 by Jason Merrill Committed by Jason Merrill

re PR c++/57222 (Template alias not working in argument of template class template method)

	PR c++/57222
	* pt.c (lookup_template_class_1): Handle getting a template
	template parameter as D1.

From-SVN: r198747
parent a57dbdaa
2013-05-09 Jason Merrill <jason@redhat.com>
PR c++/57222
* pt.c (lookup_template_class_1): Handle getting a template
template parameter as D1.
N3639 C++1y VLA diagnostics
* decl.c (grokdeclarator): Complain about reference, pointer, or
typedef to VLA.
......
......@@ -7016,7 +7016,7 @@ maybe_get_template_decl_from_type_decl (tree decl)
? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
}
/* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
/* Given an IDENTIFIER_NODE (or type TEMPLATE_DECL) and a chain of
parameters, find the desired type.
D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
......@@ -7097,6 +7097,11 @@ lookup_template_class_1 (tree d1, tree arglist, tree in_decl, tree context,
d1 = DECL_NAME (templ);
context = DECL_CONTEXT (templ);
}
else if (DECL_TEMPLATE_TEMPLATE_PARM_P (d1))
{
templ = d1;
d1 = DECL_NAME (templ);
}
/* Issue an error message if we didn't find a template. */
if (! templ)
......
// PR c++/57222
// { dg-require-effective-target c++11 }
template <template <typename T> class Templ>
using Bool = Templ<bool>;
template <typename T>
class Foo {
private:
public:
template<template<typename U> class Templ>
void method(Bool<Templ> boolTempl);
};
template <typename T>
template <template <typename U> class Templ>
void Foo<T>::method(Bool<Templ> boolTempl) {
}
int main() {
Foo<char> foo;
return 0;
}
......@@ -5,7 +5,7 @@
template<typename T> struct a
{
template <template <typename> class C, typename X, C<X>* =0>
struct b // { dg-error "class C' is not a template|is not a valid type" }
struct b
{
};
};
......@@ -13,7 +13,8 @@ template<typename T> struct a
void
foo ()
{
a<int> v; // { dg-message "required from here" }
a<int> a1; // OK
a<int>::b<a,int> b1; // { dg-error "template argument" }
}
// { dg-prune-output "invalid type in declaration" }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment