![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /usr/include/llvm-10/llvm/Support/ |
Upload File : |
//===--- MSVCErrorWorkarounds.h - Enable future<Error> in MSVC --*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // MSVC's promise/future implementation requires types to be default // constructible, so this header provides analogues of Error an Expected // that are default constructed in a safely destructible state. // // FIXME: Kill off this header and migrate all users to Error/Expected once we // move to MSVC versions that support non-default-constructible types. // //===----------------------------------------------------------------------===// #ifndef LLVM_SUPPORT_MSVCERRORWORKAROUNDS_H #define LLVM_SUPPORT_MSVCERRORWORKAROUNDS_H #include "llvm/Support/Error.h" namespace llvm { // A default-constructible llvm::Error that is suitable for use with MSVC's // std::future implementation which requires default constructible types. class MSVCPError : public Error { public: MSVCPError() { (void)!!*this; } MSVCPError(MSVCPError &&Other) : Error(std::move(Other)) {} MSVCPError &operator=(MSVCPError Other) { Error::operator=(std::move(Other)); return *this; } MSVCPError(Error Err) : Error(std::move(Err)) {} }; // A default-constructible llvm::Expected that is suitable for use with MSVC's // std::future implementation, which requires default constructible types. template <typename T> class MSVCPExpected : public Expected<T> { public: MSVCPExpected() : Expected<T>(make_error<StringError>("", inconvertibleErrorCode())) { consumeError(this->takeError()); } MSVCPExpected(MSVCPExpected &&Other) : Expected<T>(std::move(Other)) {} MSVCPExpected &operator=(MSVCPExpected &&Other) { Expected<T>::operator=(std::move(Other)); return *this; } MSVCPExpected(Error Err) : Expected<T>(std::move(Err)) {} template <typename OtherT> MSVCPExpected( OtherT &&Val, typename std::enable_if<std::is_convertible<OtherT, T>::value>::type * = nullptr) : Expected<T>(std::move(Val)) {} template <class OtherT> MSVCPExpected( Expected<OtherT> &&Other, typename std::enable_if<std::is_convertible<OtherT, T>::value>::type * = nullptr) : Expected<T>(std::move(Other)) {} template <class OtherT> explicit MSVCPExpected( Expected<OtherT> &&Other, typename std::enable_if<!std::is_convertible<OtherT, T>::value>::type * = nullptr) : Expected<T>(std::move(Other)) {} }; } // end namespace llvm #endif // LLVM_SUPPORT_MSVCERRORWORKAROUNDS_H