diff options
-rw-r--r-- | lib/AST/DeclCXX.cpp | 4 | ||||
-rw-r--r-- | test/CXX/special/class.copy/p13-0x.cpp | 5 |
2 files changed, 7 insertions, 2 deletions
diff --git a/lib/AST/DeclCXX.cpp b/lib/AST/DeclCXX.cpp index f56d4655be..3094cd68fa 100644 --- a/lib/AST/DeclCXX.cpp +++ b/lib/AST/DeclCXX.cpp @@ -243,7 +243,7 @@ CXXRecordDecl::setBases(CXXBaseSpecifier const * const *Bases, data().HasTrivialMoveAssignment = false; // C++11 [class.ctor]p6: - // If that user-written default cosntructor would satisfy the + // If that user-written default constructor would satisfy the // requirements of a constexpr constructor, the implicitly-defined // default constructor is constexpr. if (!BaseClassDecl->hasConstexprDefaultConstructor()) @@ -264,7 +264,7 @@ CXXRecordDecl::setBases(CXXBaseSpecifier const * const *Bases, // would be ill-formed, the implicit move constructor generated for the // derived class calls the base class' copy constructor. data().DefaultedMoveConstructorIsConstexpr &= - !BaseClassDecl->hasConstexprMoveConstructor(); + BaseClassDecl->hasConstexprMoveConstructor(); else if (!BaseClassDecl->hasConstexprCopyConstructor()) data().DefaultedMoveConstructorIsConstexpr = false; } diff --git a/test/CXX/special/class.copy/p13-0x.cpp b/test/CXX/special/class.copy/p13-0x.cpp index 30d8c6ebad..0a9aa62145 100644 --- a/test/CXX/special/class.copy/p13-0x.cpp +++ b/test/CXX/special/class.copy/p13-0x.cpp @@ -53,3 +53,8 @@ constexpr NonConstexprDefault ncd = NonConstexprDefault(NonConstexprDefault(1)); constexpr Constexpr4 c4a = { ncd }; constexpr Constexpr4 c4b = Constexpr4(c4a); constexpr Constexpr4 c4c = Constexpr4(static_cast<Constexpr4&&>(const_cast<Constexpr4&>(c4b))); + +struct Constexpr5Base {}; +struct Constexpr5 : Constexpr5Base { constexpr Constexpr5() {} }; +constexpr Constexpr5 ce5move = Constexpr5(); +constexpr Constexpr5 ce5copy = ce5move; |