Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] Fix for bug 36797: Templates of Variables and structs + JUnit tes t

Thanks,

Hoda

Index: src/org/eclipse/cdt/internal/ui/CElementImageProvider.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/CElementImageProvider.java,v
retrieving revision 1.14
diff -u -r1.14 CElementImageProvider.java
--- src/org/eclipse/cdt/internal/ui/CElementImageProvider.java	11 Apr 2003 14:36:52 -0000	1.14
+++ src/org/eclipse/cdt/internal/ui/CElementImageProvider.java	1 May 2003 18:30:46 -0000
@@ -204,6 +204,7 @@
 					return DESC_OBJ_PROJECT_CLOSED;
 					
 			case ICElement.C_STRUCT:
+			case ICElement.C_TEMPLATE_STRUCT:
 				return CPluginImages.DESC_OBJS_STRUCT;
 				
 			case ICElement.C_CLASS:
@@ -234,6 +235,7 @@
 			}
 			
 			case ICElement.C_VARIABLE:
+			case ICElement.C_TEMPLATE_VARIABLE:
 				return CPluginImages.DESC_OBJS_FIELD;
 
 			case ICElement.C_METHOD:  
Index: src/org/eclipse/cdt/ui/CElementLabelProvider.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/CElementLabelProvider.java,v
retrieving revision 1.13
diff -u -r1.13 CElementLabelProvider.java
--- src/org/eclipse/cdt/ui/CElementLabelProvider.java	11 Apr 2003 14:36:52 -0000	1.13
+++ src/org/eclipse/cdt/ui/CElementLabelProvider.java	1 May 2003 18:30:46 -0000
@@ -113,6 +113,9 @@
 				case ICElement.C_TEMPLATE_CLASS:
 				case ICElement.C_TEMPLATE_FUNCTION:
 				case ICElement.C_TEMPLATE_METHOD:
+				case ICElement.C_TEMPLATE_STRUCT:
+				case ICElement.C_TEMPLATE_UNION:
+				case ICElement.C_TEMPLATE_VARIABLE:
 					ITemplate template = (ITemplate) celem;
 					String signature = template.getTemplateSignature();
 					name.append(signature);
Index: model/org/eclipse/cdt/core/model/ICElement.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/ICElement.java,v
retrieving revision 1.9
diff -u -r1.9 ICElement.java
--- model/org/eclipse/cdt/core/model/ICElement.java	21 Apr 2003 20:02:58 -0000	1.9
+++ model/org/eclipse/cdt/core/model/ICElement.java	1 May 2003 18:30:19 -0000
@@ -155,6 +155,21 @@
 	static final int C_TEMPLATE_METHOD = 81;
 
 	/**
+	 * C++ template struct.
+	 */
+	static final int C_TEMPLATE_STRUCT = 82;
+
+	/**
+	 * C++ template union.
+	 */
+	static final int C_TEMPLATE_UNION = 83;
+
+	/**
+	 * C++ template variable.
+	 */
+	static final int C_TEMPLATE_VARIABLE = 84;
+
+	/**
 	 * Modifier indicating a class constructor
 	 */
 	static final int C_CLASS_CTOR = 0x100;
Index: model/org/eclipse/cdt/internal/core/model/ClassTemplate.java
===================================================================
RCS file: model/org/eclipse/cdt/internal/core/model/ClassTemplate.java
diff -N model/org/eclipse/cdt/internal/core/model/ClassTemplate.java
--- model/org/eclipse/cdt/internal/core/model/ClassTemplate.java	11 Apr 2003 14:36:51 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,71 +0,0 @@
-package org.eclipse.cdt.internal.core.model;
-
-/**********************************************************************
- * Copyright (c) 2002,2003 Rational Software Corporation and others.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v0.5
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v05.html
- * 
- * Contributors: 
- * Rational Software - Initial API and implementation
-***********************************************************************/
-import org.eclipse.cdt.core.model.ICElement;
-import org.eclipse.cdt.core.model.ITemplate;
-
-public class ClassTemplate extends Structure implements ITemplate{
-	
-	protected static final String[] fgEmptyList= new String[] {};
-	protected String[] templateParameterTypes;
-	
-	public ClassTemplate(ICElement parent, String name) {
-		super(parent, CElement.C_TEMPLATE_CLASS, name);
-		templateParameterTypes= fgEmptyList;
-	}
-	/**
-	 * Returns the parameterTypes.
-	 * @see org.eclipse.cdt.core.model.ITemplate#getParameters()
-	 * @return String[]
-	 */
-	public String[] getTemplateParameterTypes() {
-		return templateParameterTypes;
-	}
-
-	/**
-	 * Sets the fParameterTypes.
-	 * @param fParameterTypes The fParameterTypes to set
-	 */
-	public void setTemplateParameterTypes(String[] templateParameterTypes) {
-		this.templateParameterTypes = templateParameterTypes;
-	}
-
-	/**
-	 * @see org.eclipse.cdt.core.model.ITemplate#getNumberOfTemplateParameters()
-	 */
-	public int getNumberOfTemplateParameters() {
-		return templateParameterTypes == null ? 0 : templateParameterTypes.length;
-	}
-
-	/**
-	 * @see org.eclipse.cdt.core.model.ITemplate#getTemplateSignature()
-	 */	
-	public String getTemplateSignature() {
-		StringBuffer sig = new StringBuffer(getElementName());
-		if(getNumberOfTemplateParameters() > 0){
-			sig.append("<");
-			String[] paramTypes = getTemplateParameterTypes();
-			int i = 0;
-			sig.append(paramTypes[i++]);
-			while (i < paramTypes.length){
-				sig.append(", ");
-				sig.append(paramTypes[i++]);
-			}
-			sig.append(">");
-		}
-		else{
-			sig.append("<>");
-		}
-		return sig.toString();
-	}
-
-}
Index: model/org/eclipse/cdt/internal/core/model/StructureTemplate.java
===================================================================
RCS file: model/org/eclipse/cdt/internal/core/model/StructureTemplate.java
diff -N model/org/eclipse/cdt/internal/core/model/StructureTemplate.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ model/org/eclipse/cdt/internal/core/model/StructureTemplate.java	1 May 2003 18:30:20 -0000
@@ -0,0 +1,71 @@
+package org.eclipse.cdt.internal.core.model;
+
+/**********************************************************************
+ * Copyright (c) 2002,2003 Rational Software Corporation and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Common Public License v0.5
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v05.html
+ * 
+ * Contributors: 
+ * Rational Software - Initial API and implementation
+***********************************************************************/
+import org.eclipse.cdt.core.model.ICElement;
+import org.eclipse.cdt.core.model.ITemplate;
+
+public class StructureTemplate extends Structure implements ITemplate{
+	
+	protected static final String[] fgEmptyList= new String[] {};
+	protected String[] templateParameterTypes;
+	
+	public StructureTemplate(ICElement parent, int kind, String name) {
+		super(parent, kind, name);
+		templateParameterTypes= fgEmptyList;
+	}
+	/**
+	 * Returns the parameterTypes.
+	 * @see org.eclipse.cdt.core.model.ITemplate#getParameters()
+	 * @return String[]
+	 */
+	public String[] getTemplateParameterTypes() {
+		return templateParameterTypes;
+	}
+
+	/**
+	 * Sets the fParameterTypes.
+	 * @param fParameterTypes The fParameterTypes to set
+	 */
+	public void setTemplateParameterTypes(String[] templateParameterTypes) {
+		this.templateParameterTypes = templateParameterTypes;
+	}
+
+	/**
+	 * @see org.eclipse.cdt.core.model.ITemplate#getNumberOfTemplateParameters()
+	 */
+	public int getNumberOfTemplateParameters() {
+		return templateParameterTypes == null ? 0 : templateParameterTypes.length;
+	}
+
+	/**
+	 * @see org.eclipse.cdt.core.model.ITemplate#getTemplateSignature()
+	 */	
+	public String getTemplateSignature() {
+		StringBuffer sig = new StringBuffer(getElementName());
+		if(getNumberOfTemplateParameters() > 0){
+			sig.append("<");
+			String[] paramTypes = getTemplateParameterTypes();
+			int i = 0;
+			sig.append(paramTypes[i++]);
+			while (i < paramTypes.length){
+				sig.append(", ");
+				sig.append(paramTypes[i++]);
+			}
+			sig.append(">");
+		}
+		else{
+			sig.append("<>");
+		}
+		return sig.toString();
+	}
+
+}
Index: model/org/eclipse/cdt/internal/core/model/Variable.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/Variable.java,v
retrieving revision 1.4
diff -u -r1.4 Variable.java
--- model/org/eclipse/cdt/internal/core/model/Variable.java	8 Apr 2003 21:30:53 -0000	1.4
+++ model/org/eclipse/cdt/internal/core/model/Variable.java	1 May 2003 18:30:20 -0000
@@ -14,6 +14,10 @@
 		super(parent, name, CElement.C_VARIABLE);
 	}
 
+	public Variable(ICElement parent, String name, int kind) {
+		super(parent, name, kind);
+	}
+
 	public String getInitializer() {
 		return "";
 	}
Index: model/org/eclipse/cdt/internal/core/model/VariableTemplate.java
===================================================================
RCS file: model/org/eclipse/cdt/internal/core/model/VariableTemplate.java
diff -N model/org/eclipse/cdt/internal/core/model/VariableTemplate.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ model/org/eclipse/cdt/internal/core/model/VariableTemplate.java	1 May 2003 18:30:20 -0000
@@ -0,0 +1,71 @@
+package org.eclipse.cdt.internal.core.model;
+/**********************************************************************
+ * Copyright (c) 2002,2003 Rational Software Corporation and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Common Public License v0.5
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v05.html
+ * 
+ * Contributors: 
+ * Rational Software - Initial API and implementation
+***********************************************************************/
+import org.eclipse.cdt.core.model.ICElement;
+import org.eclipse.cdt.core.model.ITemplate;
+
+public class VariableTemplate extends Variable implements ITemplate {
+
+	protected static final String[] fgEmptyList= new String[] {};
+	protected String[] templateParameterTypes;
+		
+	public VariableTemplate(ICElement parent, String name) {
+		super(parent, name, CElement.C_TEMPLATE_VARIABLE);
+		templateParameterTypes= fgEmptyList;		
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.core.model.ITemplate#getNumberOfTemplateParameters()
+	 */
+	public int getNumberOfTemplateParameters() {
+		return templateParameterTypes == null ? 0 : templateParameterTypes.length;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.core.model.ITemplate#getTemplateParameterTypes()
+	 */
+	public String[] getTemplateParameterTypes() {
+		return templateParameterTypes;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.core.model.ITemplate#setTemplateParameterTypes(java.lang.String[])
+	 */
+	public void setTemplateParameterTypes(String[] templateParameterTypes) {
+		this.templateParameterTypes = templateParameterTypes;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.core.model.ITemplate#getTemplateSignature()
+	 */
+	public String getTemplateSignature() {
+		StringBuffer sig = new StringBuffer(getElementName());
+		if(getNumberOfTemplateParameters() > 0){
+			sig.append("<");
+			String[] paramTypes = getTemplateParameterTypes();
+			int i = 0;
+			sig.append(paramTypes[i++]);
+			while (i < paramTypes.length){
+				sig.append(", ");
+				sig.append(paramTypes[i++]);
+			}
+			sig.append(">");
+		}
+		else{
+			sig.append("<>");
+		}
+		
+		sig.append(" : ");
+		sig.append(this.getTypeName());
+		
+		return sig.toString();
+	}
+}
Index: parser/org/eclipse/cdt/internal/core/model/CModelBuilder.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/model/CModelBuilder.java,v
retrieving revision 1.22
diff -u -r1.22 CModelBuilder.java
--- parser/org/eclipse/cdt/internal/core/model/CModelBuilder.java	28 Apr 2003 17:36:24 -0000	1.22
+++ parser/org/eclipse/cdt/internal/core/model/CModelBuilder.java	1 May 2003 18:30:20 -0000
@@ -174,7 +174,7 @@
 			TypeSpecifier typeSpec = simpleDeclaration.getTypeSpecifier();
 			if (typeSpec instanceof ClassSpecifier){
 				ClassSpecifier classSpecifier = (ClassSpecifier) typeSpec;
-				ITemplate classTemplate = (ClassTemplate)createClass(parent, simpleDeclaration, classSpecifier, true);
+				ITemplate classTemplate = (StructureTemplate)createClass(parent, simpleDeclaration, classSpecifier, true);
 				CElement element = (CElement) classTemplate;
 				// set the element position		
 				element.setPos(templateDeclaration.getStartingOffset(), templateDeclaration.getTotalLength());	
@@ -211,7 +211,7 @@
 			ParameterDeclarationClause pdc = declarator.getParms();
 			// variable or field
 			if (pdc == null){	
-				createVariableSpecification(parent, simpleDeclaration, declarator); 
+				createVariableSpecification(parent, simpleDeclaration, declarator, false); 
 			}
 			else{
 				// pointer to function 
@@ -227,9 +227,16 @@
 
 	protected void createTemplateElement(Parent parent, TemplateDeclaration templateDeclaration, SimpleDeclaration simpleDeclaration, Declarator declarator){
 		ParameterDeclarationClause pdc = declarator.getParms();
-		if (pdc != null){
+		ITemplate template = null;
+		if (pdc == null){	
+			template = (ITemplate) createVariableSpecification(parent, simpleDeclaration, declarator, true); 
+		}
+		else{
 			// template of function or method
-			ITemplate template = (ITemplate) createFunctionSpecification(parent, simpleDeclaration, declarator, pdc, true);
+			template = (ITemplate) createFunctionSpecification(parent, simpleDeclaration, declarator, pdc, true);
+		}
+
+		if(template != null){
 			CElement element = (CElement)template;
 			// set the element position		
 			element.setPos(templateDeclaration.getStartingOffset(), templateDeclaration.getTotalLength());	
@@ -338,13 +345,22 @@
 		switch( classSpecifier.getClassKey() )
 		{
 			case ClassKey.t_class:
-				kind = ICElement.C_CLASS;
+				if(!isTemplate)
+					kind = ICElement.C_CLASS;
+				else
+					kind = ICElement.C_TEMPLATE_CLASS;
 				break;
 			case ClassKey.t_struct:
-				kind = ICElement.C_STRUCT;
+				if(!isTemplate)
+					kind = ICElement.C_STRUCT;
+				else
+					kind = ICElement.C_TEMPLATE_STRUCT;
 				break;	
 			default:
-				kind = ICElement.C_UNION;
+				if(!isTemplate)
+					kind = ICElement.C_UNION;
+				else
+					kind = ICElement.C_TEMPLATE_UNION;
 				break;
 		}
 		
@@ -353,7 +369,7 @@
 			Structure classElement = new Structure( (CElement)parent, kind, className );
 			element = classElement;
 		} else {
-			ClassTemplate classTemplate = new ClassTemplate( (CElement)parent, className );
+			StructureTemplate classTemplate = new StructureTemplate( (CElement)parent, kind, className );
 			element = classTemplate;
 		}
 		
@@ -408,7 +424,7 @@
 		return element;	
 	}
 
-	protected VariableDeclaration createVariableSpecification(Parent parent, SimpleDeclaration simpleDeclaration, Declarator declarator){
+	protected VariableDeclaration createVariableSpecification(Parent parent, SimpleDeclaration simpleDeclaration, Declarator declarator, boolean isTemplate){
 		Name domName = ( declarator.getDeclarator() != null ) ? 
 			declarator.getDeclarator().getName() : 
 			declarator.getName(); 
@@ -425,15 +441,21 @@
 			element = newElement;			
 		}
 		else {
-			if(declSpecifier.isExtern()){
-				// variableDeclaration
-				VariableDeclaration newElement = new VariableDeclaration( parent, variableName );
-				element = newElement;
-			}
-			else {
+			if(isTemplate){
 				// variable
-				Variable newElement = new Variable( parent, variableName );
-				element = newElement;				
+				VariableTemplate newElement = new VariableTemplate( parent, variableName );
+				element = newElement;									
+			}else {
+				if(declSpecifier.isExtern()){
+					// variableDeclaration
+					VariableDeclaration newElement = new VariableDeclaration( parent, variableName );
+					element = newElement;
+				}
+				else {
+					// variable
+					Variable newElement = new Variable( parent, variableName );
+					element = newElement;				
+				}
 			}
 		}
 		element.setTypeName ( getType(simpleDeclaration, declarator) );
@@ -445,9 +467,12 @@
 
 		// set position
 		element.setIdPos( domName.getStartOffset(), domName.length() );
-		element.setPos(simpleDeclaration.getStartingOffset(), simpleDeclaration.getTotalLength());
-		// set the element lines
-		element.setLines(simpleDeclaration.getTopLine(), simpleDeclaration.getBottomLine());
+		if(!isTemplate){
+			// set element position
+			element.setPos(simpleDeclaration.getStartingOffset(), simpleDeclaration.getTotalLength());
+			// set the element lines
+			element.setLines(simpleDeclaration.getTopLine(), simpleDeclaration.getBottomLine());
+		}
 			
 		this.newElements.put(element, element.getElementInfo());
 		return element;
Index: model/org/eclipse/cdt/core/model/tests/CModelElementsTests.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/CModelElementsTests.java,v
retrieving revision 1.7
diff -u -r1.7 CModelElementsTests.java
--- model/org/eclipse/cdt/core/model/tests/CModelElementsTests.java	22 Apr 2003 15:22:26 -0000	1.7
+++ model/org/eclipse/cdt/core/model/tests/CModelElementsTests.java	1 May 2003 18:31:10 -0000
@@ -39,10 +39,11 @@
 import org.eclipse.cdt.core.model.IVariable;
 import org.eclipse.cdt.core.model.IVariableDeclaration;
 import org.eclipse.cdt.internal.core.model.CElement;
-import org.eclipse.cdt.internal.core.model.ClassTemplate;
+import org.eclipse.cdt.internal.core.model.StructureTemplate;
 import org.eclipse.cdt.internal.core.model.FunctionTemplate;
 import org.eclipse.cdt.internal.core.model.MethodTemplate;
 import org.eclipse.cdt.internal.core.model.TranslationUnit;
+import org.eclipse.cdt.internal.core.model.VariableTemplate;
 import org.eclipse.cdt.testplugin.CProjectHelper;
 import org.eclipse.cdt.testplugin.TestPluginLauncher;
 import org.eclipse.core.resources.IFile;
@@ -411,7 +412,7 @@
 		FunctionTemplate ft = (FunctionTemplate)functionTemplates.get(0);
 		assertEquals(ft.getElementName(), new String("aTemplatedFunction"));
 		assertEquals(ft.getTemplateSignature(), new String("aTemplatedFunction<A, B>(B) : A"));
-		checkLineNumbers((CElement)ft, 112, 112);
+		checkLineNumbers((CElement)ft, 112, 113);
 		
 		// template method
 		ArrayList nsClasses = namespace.getChildrenOfType(ICElement.C_CLASS);
@@ -421,15 +422,29 @@
 		MethodTemplate mt = (MethodTemplate)methodTemplates.get(0);
 		assertEquals(mt.getElementName(), new String("aTemplatedMethod"));
 		assertEquals(mt.getTemplateSignature(), new String("aTemplatedMethod<A, B>(B) : A"));
-		checkLineNumbers((CElement)mt, 117, 117);
+		checkLineNumbers((CElement)mt, 118, 119);
 		assertEquals(mt.getVisibility(), IMember.V_PUBLIC);
 		
 		// template class
 		ArrayList classTemplates = namespace.getChildrenOfType(ICElement.C_TEMPLATE_CLASS);
-		ClassTemplate ct = (ClassTemplate)classTemplates.get(0);
+		StructureTemplate ct = (StructureTemplate)classTemplates.get(0);
 		assertEquals(ct.getElementName(), new String("myarray"));
 		assertEquals(ct.getTemplateSignature(), new String("myarray<T, Tibor>"));
-		checkLineNumbers((CElement)ct, 120, 120);
+		checkLineNumbers((CElement)ct, 122, 123);
+
+		// template struct
+		ArrayList structTemplates = namespace.getChildrenOfType(ICElement.C_TEMPLATE_STRUCT);
+		StructureTemplate st = (StructureTemplate)structTemplates.get(0);
+		assertEquals(st.getElementName(), new String("mystruct"));
+		assertEquals(st.getTemplateSignature(), new String("mystruct<T, Tibor>"));
+		checkLineNumbers((CElement)st, 125, 126);
+
+		// template variable
+		ArrayList variableTemplates = namespace.getChildrenOfType(ICElement.C_TEMPLATE_VARIABLE);
+		VariableTemplate vt = (VariableTemplate)variableTemplates.get(0);
+		assertEquals(vt.getElementName(), new String("default_alloc_template<__threads,__inst>::_S_start_free"));
+		assertEquals(vt.getTemplateSignature(), new String("default_alloc_template<__threads,__inst>::_S_start_free<bool, int> : char*"));
+		checkLineNumbers((CElement)vt, 128, 129);
 	}
 	
 	private void checkArrays(IParent tu){
@@ -438,14 +453,14 @@
 		IVariable arrayVar = (IVariable) variables.get(0);
 		assertEquals(arrayVar.getElementName(), new String("myArray"));
 		assertEquals(arrayVar.getTypeName(), new String("int[][]"));
-		checkLineNumbers((CElement)arrayVar, 125, 125);
+		checkLineNumbers((CElement)arrayVar, 133, 133);
 		
 		// array parameter in function main
 		ArrayList functions = tu.getChildrenOfType(ICElement.C_FUNCTION);
 		IFunction mainFunction  = (IFunction) functions.get(0);
 		assertEquals(mainFunction.getElementName(), new String("main"));
 		assertEquals(mainFunction.getReturnType(), new String("int"));
-		checkLineNumbers((CElement)mainFunction, 126, 128);
+		checkLineNumbers((CElement)mainFunction, 134, 136);
 		int NumOfParam = mainFunction.getNumberOfParameters();
 		if(NumOfParam != 2)
 			fail("main should have two parameter!");
Index: model/org/eclipse/cdt/core/model/tests/resources/cfiles/CModelElementsTestStart.h
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/cfiles/CModelElementsTestStart.h,v
retrieving revision 1.3
diff -u -r1.3 CModelElementsTestStart.h
--- model/org/eclipse/cdt/core/model/tests/resources/cfiles/CModelElementsTestStart.h	21 Apr 2003 16:16:58 -0000	1.3
+++ model/org/eclipse/cdt/core/model/tests/resources/cfiles/CModelElementsTestStart.h	1 May 2003 18:31:10 -0000
@@ -109,17 +109,25 @@
 
 	// check templates
 	// template function
-	template<class A, typename B=C> A aTemplatedFunction( B bInstance );
+	template<class A, typename B=C> 
+	A aTemplatedFunction( B bInstance );
 	// template method
 	class enclosing {
 		// public visibility
 		public:
-		template<class A, typename B=C> A aTemplatedMethod( B bInstance );
+		template<class A, typename B=C> 
+		A aTemplatedMethod( B bInstance );
 	};
 	// template class
-	template<class T, typename Tibor = junk> class myarray { /* */ };
+	template<class T, typename Tibor = junk> 
+	class myarray { /* */ };
+	// template struct
+	template<class T, typename Tibor = junk> 
+	struct mystruct { /* */ };
+	// template variable
+	template <bool __threads, int __inst>
+	char* default_alloc_template<__threads, __inst>::_S_start_free = 0;
 };
-
 	// check arrays
 	// arrays
 	int myArray [5][];

Back to the top