@@ -15719,6 +15719,7 @@ cp_parser_template_name (cp_parser* parser,
cp_lexer_purge_tokens_after (parser->lexer, start);
if (is_identifier)
*is_identifier = true;
+ parser->context->object_type = NULL_TREE;
return identifier;
}
@@ -15730,7 +15731,12 @@ cp_parser_template_name (cp_parser* parser,
&& (!parser->scope
|| (TYPE_P (parser->scope)
&& dependent_type_p (parser->scope))))
- return identifier;
+ {
+ /* We're optimizing away the call to cp_parser_lookup_name, but we
+ still need to do this. */
+ parser->context->object_type = NULL_TREE;
+ return identifier;
+ }
}
/* Look up the name. */
new file mode 100644
@@ -0,0 +1,22 @@
+// PR c++/79508
+
+struct C
+{
+ template< void(*F)()> void set_default() { }
+};
+
+
+template <class T> void random_positive()
+{
+}
+
+template<class T> void initialize(T& x)
+{
+ x.template set_default<random_positive<T> >();
+}
+
+int main ()
+{
+ C x;
+ initialize<C>(x);
+}