diff options
2 files changed, 19 insertions, 1 deletions
diff --git a/codan/org.eclipse.cdt.codan.core.test/src/org/eclipse/cdt/codan/core/internal/checkers/ClassMembersInitializationCheckerTest.java b/codan/org.eclipse.cdt.codan.core.test/src/org/eclipse/cdt/codan/core/internal/checkers/ClassMembersInitializationCheckerTest.java index be2e57fb593..33a156feb3e 100644 --- a/codan/org.eclipse.cdt.codan.core.test/src/org/eclipse/cdt/codan/core/internal/checkers/ClassMembersInitializationCheckerTest.java +++ b/codan/org.eclipse.cdt.codan.core.test/src/org/eclipse/cdt/codan/core/internal/checkers/ClassMembersInitializationCheckerTest.java @@ -590,6 +590,8 @@ public class ClassMembersInitializationCheckerTest extends CheckerTestCase { } // struct S { + // int i; + // // S(S&) = default; // S(const S&) = default; // S(volatile S&) = default; @@ -604,6 +606,18 @@ public class ClassMembersInitializationCheckerTest extends CheckerTestCase { checkNoErrors(); } + // template <typename T> + // struct S { + // int i; + // + // S(const S&) = default; + // S(S&&) = default; + // }; + public void testBug408303_defaultCopyOrMoveConstructorInTemplate() throws Exception { + loadCodeAndRun(getAboveComment()); + checkNoErrors(); + } + // struct A { // A(int n) : waldo(n) {} // A() : A(42) {} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/SemanticQueries.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/SemanticQueries.java index 60fd014f6c4..523fd65593c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/SemanticQueries.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/SemanticQueries.java @@ -14,6 +14,7 @@ import static org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUti import static org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUtil.TDEF; import org.eclipse.cdt.core.dom.ast.IType; +import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPTemplates; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUtil; /** @@ -57,7 +58,10 @@ public class SemanticQueries { return false; firstArgumentType = firstArgReferenceType.getType(); firstArgumentType = SemanticUtil.getNestedType(firstArgumentType, CVTYPE); - return firstArgumentType.isSameType(constructor.getClassOwner()); + ICPPClassType classType = constructor.getClassOwner(); + if (classType instanceof ICPPClassTemplate) + classType = CPPTemplates.createDeferredInstance((ICPPClassTemplate) classType); + return firstArgumentType.isSameType(classType); } private static boolean isCallableWithNumberOfArguments(ICPPFunction function, int numArguments) { |