* pt.c (lookup_template_class_1): Handle getting template from tsubst.
From-SVN: r238685
2016-07-23 Jason Merrill <jason@redhat.com>
+ PR c++/71738
+ * pt.c (lookup_template_class_1): Handle getting template from tsubst.
+
PR c++/71350
* decl.c (reshape_init_r): Check complain for missing braces warning.
for parameters in the TYPE_DECL of the alias template
done earlier. So be careful while getting the template
of FOUND. */
- found = TREE_CODE (found) == TYPE_DECL
+ found = TREE_CODE (found) == TEMPLATE_DECL
+ ? found
+ : TREE_CODE (found) == TYPE_DECL
? TYPE_TI_TEMPLATE (TREE_TYPE (found))
: CLASSTYPE_TI_TEMPLATE (found);
}
--- /dev/null
+// PR c++/71738
+
+template < class > struct S
+{
+ template < class > struct A
+ {
+ template < class > struct B
+ {
+ template <class Z>
+ void operator=(Z) { S::i = 0; }
+ };
+ };
+
+ // Note that this friend declaration is useless, since nested classes are
+ // already friends of their enclosing class.
+ template < class X >
+ template < class Y >
+ template < class Z >
+ friend void A < X >::B < Y >::operator= (Z);
+
+private:
+ static int i;
+};
+
+int main()
+{
+ S<int>::A<int>::B<int> b;
+ b = 0;
+}