diff options
author | Egor Tensin <Egor.Tensin@gmail.com> | 2020-10-27 01:55:22 +0300 |
---|---|---|
committer | Egor Tensin <Egor.Tensin@gmail.com> | 2020-10-27 02:27:56 +0300 |
commit | 3a36e6c51974594d994562c712e068835aae85f1 (patch) | |
tree | 460a6e11ed579f42d03de0234786552ccffe2da4 /include | |
parent | clang-format (diff) | |
download | winapi-common-3a36e6c51974594d994562c712e068835aae85f1.tar.gz winapi-common-3a36e6c51974594d994562c712e068835aae85f1.zip |
VS 2013 workarounds
Diffstat (limited to 'include')
-rw-r--r-- | include/winapi/process.hpp | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/include/winapi/process.hpp b/include/winapi/process.hpp index 095b50c..3c9a840 100644 --- a/include/winapi/process.hpp +++ b/include/winapi/process.hpp @@ -29,11 +29,19 @@ struct ProcessParameters { explicit ProcessParameters(const CommandLine& cmd_line) : cmd_line{cmd_line} {} + // VS 2013 won't generate these automatically. + ProcessParameters(ProcessParameters&&) BOOST_NOEXCEPT_OR_NOTHROW; + ProcessParameters& operator=(ProcessParameters) BOOST_NOEXCEPT_OR_NOTHROW; + void swap(ProcessParameters& other) BOOST_NOEXCEPT_OR_NOTHROW; + ProcessParameters(const ProcessParameters&) = delete; + CommandLine cmd_line; boost::optional<process::IO> io; ConsoleCreationMode console_mode = ConsoleNew; }; +void swap(ProcessParameters&, ProcessParameters&) BOOST_NOEXCEPT_OR_NOTHROW; + struct ShellParameters : ProcessParameters { explicit ShellParameters(const CommandLine& cmd_line) : ProcessParameters{cmd_line} {} @@ -43,9 +51,17 @@ struct ShellParameters : ProcessParameters { return params; } + // VS 2013 won't generate these automatically. + ShellParameters(ShellParameters&&) BOOST_NOEXCEPT_OR_NOTHROW; + ShellParameters& operator=(ShellParameters) BOOST_NOEXCEPT_OR_NOTHROW; + void swap(ShellParameters& other) BOOST_NOEXCEPT_OR_NOTHROW; + ShellParameters(const ShellParameters&) = delete; + boost::optional<std::string> verb; }; +void swap(ShellParameters&, ShellParameters&) BOOST_NOEXCEPT_OR_NOTHROW; + class Process { public: static Process create(ProcessParameters); @@ -55,6 +71,12 @@ public: static Process shell(const ShellParameters&); static Process shell(const CommandLine&); + // VS 2013 won't generate these automatically. + Process(Process&&) BOOST_NOEXCEPT_OR_NOTHROW; + Process& operator=(Process) BOOST_NOEXCEPT_OR_NOTHROW; + void swap(Process& other) BOOST_NOEXCEPT_OR_NOTHROW; + Process(const Process&) = delete; + bool is_running() const; void wait() const; void terminate(int ec = 0) const; @@ -74,4 +96,26 @@ private: Handle m_handle; }; +void swap(Process& a, Process& b) BOOST_NOEXCEPT_OR_NOTHROW; + } // namespace winapi + +namespace std { + +template <> +inline void swap(winapi::ProcessParameters& a, + winapi::ProcessParameters& b) BOOST_NOEXCEPT_OR_NOTHROW { + a.swap(b); +} + +template <> +inline void swap(winapi::ShellParameters& a, winapi::ShellParameters& b) BOOST_NOEXCEPT_OR_NOTHROW { + a.swap(b); +} + +template <> +inline void swap(winapi::Process& a, winapi::Process& b) BOOST_NOEXCEPT_OR_NOTHROW { + a.swap(b); +} + +} // namespace std |