]> granicus.if.org Git - clang/commitdiff
Compute whether a class is trivial correctly for template classes with an explicitly...
authorEli Friedman <eli.friedman@gmail.com>
Tue, 15 Nov 2011 22:39:08 +0000 (22:39 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Tue, 15 Nov 2011 22:39:08 +0000 (22:39 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144715 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaTemplateInstantiateDecl.cpp
test/CXX/special/class.ctor/p5-0x.cpp

index ec5ccd3f8a7958de039106d5f5bd75c7156d1a39..865d62e14b9b3c517cdb15b97f50560a913da2f9 100644 (file)
@@ -1526,6 +1526,12 @@ TemplateDeclInstantiator::VisitCXXMethodDecl(CXXMethodDecl *D,
 
   SemaRef.CheckOverrideControl(Method);
 
+  // If a function is defined as defaulted or deleted, mark it as such now.
+  if (D->isDefaulted())
+    Method->setDefaulted();
+  if (D->isDeletedAsWritten())
+    Method->setDeletedAsWritten();
+
   if (FunctionTemplate) {
     // If there's a function template, let our caller handle it.
   } else if (Method->isInvalidDecl() && !Previous.empty()) {
index c8d206ae37772c7f768ebf99e0b207a7ca445422..00c25e8e3a0837bc076e7f3a8f608a3681c6ec67 100644 (file)
@@ -157,7 +157,14 @@ static_assert(!__has_trivial_constructor(NonTrivialDefCtor6), "NonTrivialDefCtor
 
 // Otherwise, the default constructor is non-trivial.
 class Trivial2 { Trivial2() = delete; };
-static_assert(__has_trivial_constructor(Trivial2), "NonTrivialDefCtor2 is trivial");
+static_assert(__has_trivial_constructor(Trivial2), "Trivial2 is trivial");
 
 class Trivial3 { Trivial3() = default; };
-static_assert(__has_trivial_constructor(Trivial3), "NonTrivialDefCtor3 is trivial");
+static_assert(__has_trivial_constructor(Trivial3), "Trivial3 is trivial");
+
+template<typename T> class Trivial4 { Trivial4() = default; };
+static_assert(__has_trivial_constructor(Trivial4<int>), "Trivial4 is trivial");
+
+template<typename T> class Trivial5 { Trivial5() = delete; };
+static_assert(__has_trivial_constructor(Trivial5<int>), "Trivial5 is trivial");
+