]> granicus.if.org Git - clang/commitdiff
The year is 2014. MSVC is still unable to synthesize move ctors.
authorBenjamin Kramer <benny.kra@googlemail.com>
Sat, 15 Mar 2014 17:35:02 +0000 (17:35 +0000)
committerBenjamin Kramer <benny.kra@googlemail.com>
Sat, 15 Mar 2014 17:35:02 +0000 (17:35 +0000)
Work around with a ton of boilerplate.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@204009 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Lex/Preprocessor.h

index e103731f64549d16d16f5c7833626738c6a771d4..54dee6149387cebfce0b15198389a177a4c16199 100644 (file)
@@ -305,6 +305,29 @@ class Preprocessor : public RefCountedBase<Preprocessor> {
     PreprocessorLexer          *ThePPLexer;
     std::unique_ptr<TokenLexer> TheTokenLexer;
     const DirectoryLookup      *TheDirLookup;
+
+    // The following constructors are completely useless copies of the default
+    // versions, only needed to pacify MSVC.
+    IncludeStackInfo(enum CurLexerKind CurLexerKind, Module *TheSubmodule,
+                     std::unique_ptr<Lexer> &&TheLexer,
+                     std::unique_ptr<PTHLexer> &&ThePTHLexer,
+                     PreprocessorLexer *ThePPLexer,
+                     std::unique_ptr<TokenLexer> &&TheTokenLexer,
+                     const DirectoryLookup *TheDirLookup)
+        : CurLexerKind(std::move(CurLexerKind)),
+          TheSubmodule(std::move(TheSubmodule)), TheLexer(std::move(TheLexer)),
+          ThePTHLexer(std::move(ThePTHLexer)),
+          ThePPLexer(std::move(ThePPLexer)),
+          TheTokenLexer(std::move(TheTokenLexer)),
+          TheDirLookup(std::move(TheDirLookup)) {}
+    IncludeStackInfo(IncludeStackInfo &&RHS)
+        : CurLexerKind(std::move(RHS.CurLexerKind)),
+          TheSubmodule(std::move(RHS.TheSubmodule)),
+          TheLexer(std::move(RHS.TheLexer)),
+          ThePTHLexer(std::move(RHS.ThePTHLexer)),
+          ThePPLexer(std::move(RHS.ThePPLexer)),
+          TheTokenLexer(std::move(RHS.TheTokenLexer)),
+          TheDirLookup(std::move(RHS.TheDirLookup)) {}
   };
   std::vector<IncludeStackInfo> IncludeMacroStack;
 
@@ -1321,11 +1344,9 @@ public:
 private:
 
   void PushIncludeMacroStack() {
-    IncludeStackInfo Info = {CurLexerKind,        CurSubmodule,
-                             std::move(CurLexer), std::move(CurPTHLexer),
-                             CurPPLexer,          std::move(CurTokenLexer),
-                             CurDirLookup};
-    IncludeMacroStack.push_back(std::move(Info));
+    IncludeMacroStack.push_back(IncludeStackInfo(
+        CurLexerKind, CurSubmodule, std::move(CurLexer), std::move(CurPTHLexer),
+        CurPPLexer, std::move(CurTokenLexer), CurDirLookup));
     CurPPLexer = 0;
   }