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) { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits