[clang-tools-extra] r325254 - [clangd] Fixed compilation with MVSC.
Ilya Biryukov via cfe-commits
cfe-commits at lists.llvm.org
Thu Feb 15 07:41:49 PST 2018
Author: ibiryukov
Date: Thu Feb 15 07:41:49 2018
New Revision: 325254
URL: http://llvm.org/viewvc/llvm-project?rev=325254&view=rev
Log:
[clangd] Fixed compilation with MVSC.
Modified:
clang-tools-extra/trunk/unittests/clangd/SyncAPI.cpp
Modified: clang-tools-extra/trunk/unittests/clangd/SyncAPI.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/SyncAPI.cpp?rev=325254&r1=325253&r2=325254&view=diff
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/SyncAPI.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/SyncAPI.cpp Thu Feb 15 07:41:49 2018
@@ -32,9 +32,11 @@ template <typename T> struct CaptureProx
operator UniqueFunction<void(T)>() && {
assert(!Future.valid() && "conversion to callback called multiple times");
Future = Promise.get_future();
- return BindWithForward([](std::promise<T> Promise,
- T Value) { Promise.set_value(std::move(Value)); },
- std::move(Promise));
+ return BindWithForward(
+ [](std::promise<std::shared_ptr<T>> Promise, T Value) {
+ Promise.set_value(std::make_shared<T>(std::move(Value)));
+ },
+ std::move(Promise));
}
~CaptureProxy() {
@@ -42,13 +44,16 @@ template <typename T> struct CaptureProx
return;
assert(Future.valid() && "conversion to callback was not called");
assert(!Target->hasValue());
- Target->emplace(Future.get());
+ Target->emplace(std::move(*Future.get()));
}
private:
llvm::Optional<T> *Target;
- std::promise<T> Promise;
- std::future<T> Future;
+ // Using shared_ptr to workaround compilation errors with MSVC.
+ // MSVC only allows default-construcitble and copyable objects as future<>
+ // arguments.
+ std::promise<std::shared_ptr<T>> Promise;
+ std::future<std::shared_ptr<T>> Future;
};
template <typename T> CaptureProxy<T> capture(llvm::Optional<T> &Target) {
More information about the cfe-commits
mailing list