1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

bug 169628

This commit is contained in:
Andrew Niefer 2007-01-11 03:22:56 +00:00
parent ce9cf841bd
commit 3d06ebc729
2 changed files with 20 additions and 3 deletions

View file

@ -1986,4 +1986,16 @@ public class AST2TemplateTests extends AST2BaseTest {
assertSame(blah, col.getName(15).resolveBinding());
assertSame(c2, col.getName(16).resolveBinding());
}
public void testBug169628() throws Exception {
StringBuffer buffer = new StringBuffer();
buffer.append("template< class T > class C {}; \n"); //$NON-NLS-1$
buffer.append("typedef struct C<int> CInt; \n"); //$NON-NLS-1$
IASTTranslationUnit tu = parse(buffer.toString(), ParserLanguage.CPP, true, true );
CPPNameCollector col = new CPPNameCollector();
tu.accept( col );
assertTrue( col.getName(2).resolveBinding() instanceof ICPPSpecialization );
}
}

View file

@ -220,8 +220,9 @@ public class CPPTemplates {
parent instanceof ICPPASTElaboratedTypeSpecifier && segment != 0 )
{
return createClassExplicitInstantiation( (ICPPASTElaboratedTypeSpecifier) parent );
} else if( (parent instanceof ICPPASTElaboratedTypeSpecifier ||
parent instanceof ICPPASTCompositeTypeSpecifier ) && segment != 0 ){
} else if( ( (parent instanceof ICPPASTElaboratedTypeSpecifier && decl instanceof ICPPASTTemplateDeclaration) ||
parent instanceof ICPPASTCompositeTypeSpecifier )
&& segment != 0 ){
return createClassSpecialization( (ICPPASTDeclSpecifier) parent );
} else if( parent instanceof ICPPASTFunctionDeclarator && segment != 0 ){
return createFunctionSpecialization( id );
@ -229,7 +230,11 @@ public class CPPTemplates {
//a reference: class or function template?
IBinding template = null;
if( parent instanceof ICPPASTNamedTypeSpecifier || parent instanceof ICPPASTBaseSpecifier || segment == 0 ){
if( parent instanceof ICPPASTNamedTypeSpecifier ||
parent instanceof ICPPASTElaboratedTypeSpecifier ||
parent instanceof ICPPASTBaseSpecifier ||
segment == 0 )
{
//class template
IASTName templateName = id.getTemplateName();
template = templateName.resolveBinding();