Hi cfe-dev,

I’m hacking on Clang and have a trouble about template scope. Should ‘Scope::TemplateParamScope (*1)’ be turned on while parsing entire template declarations, or not?

The description “Template parameter scope starts at the ‘template’ keyword and ends when the template declaration ends.” (*1) sounds like it should be true. I found that the flag is, however, sometimes turned off. I wonder if I could know whether it’s expected behavior or not. (If it’s not good behavior, I’m thinking about fixing it.)

Let’s think about the following simple template function.


Object* make(T a) {
return new Object(&a);

I expected ‘TemplateParamScope’ is on while parsing the ‘new’ expression above. But, it’s actually turned off since the Scope is overwritten in ParseFunctionDefinition at (*2).

(*1) TemplateParamScope:


Thanks in advance.

btw, what I eventually want is to know “whether it’s in template declaration or not” in Parser::ParseCXXNewExpression(). If there’s an easier way to do it, I wonder if someone could tell me that.