From 45efc199e360d77565896792ecb3746d204f5914 Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Sat, 15 Mar 2014 17:35:02 +0000 Subject: [PATCH] The year is 2014. MSVC is still unable to synthesize move ctors. 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 | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/include/clang/Lex/Preprocessor.h b/include/clang/Lex/Preprocessor.h index e103731f64..54dee61493 100644 --- a/include/clang/Lex/Preprocessor.h +++ b/include/clang/Lex/Preprocessor.h @@ -305,6 +305,29 @@ class Preprocessor : public RefCountedBase { PreprocessorLexer *ThePPLexer; std::unique_ptr 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 &&TheLexer, + std::unique_ptr &&ThePTHLexer, + PreprocessorLexer *ThePPLexer, + std::unique_ptr &&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 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; } -- 2.40.0