[clangd] Attempt to fix compilation breakage with MSVC.

llvm-svn: 323859
This commit is contained in:
Ilya Biryukov 2018-01-31 09:50:21 +00:00
parent e6a8329e9f
commit f9fe311ee7
1 changed files with 9 additions and 5 deletions

View File

@ -34,21 +34,25 @@ namespace {
// Issues an async read of AST and waits for results.
template <class Ret, class Func>
Ret blockingRunWithAST(TUScheduler &S, PathRef File, Func &&F) {
std::packaged_task<Ret(llvm::Expected<InputsAndAST>)> Task(
// Using Optional to workaround MSVC bug. It requires future<> arguments to
// have default ctor.
std::packaged_task<llvm::Optional<Ret>(llvm::Expected<InputsAndAST>)> Task(
std::forward<Func>(F));
auto Future = Task.get_future();
S.runWithAST(File, std::move(Task));
return Future.get();
return *Future.get();
}
// Issues an async read of preamble and waits for results.
template <class Ret, class Func>
Ret blockingRunWithPreamble(TUScheduler &S, PathRef File, Func &&F) {
std::packaged_task<Ret(llvm::Expected<InputsAndPreamble>)> Task(
std::forward<Func>(F));
// Using Optional to workaround MSVC bug. It requires future<> arguments to
// have default ctor.
std::packaged_task<llvm::Optional<Ret>(llvm::Expected<InputsAndPreamble>)>
Task(std::forward<Func>(F));
auto Future = Task.get_future();
S.runWithPreamble(File, std::move(Task));
return Future.get();
return *Future.get();
}
void ignoreError(llvm::Error Err) {