Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /// Primary template for future.
- template<typename _Res>
- class future : public __basic_future<_Res>
- {
- friend class promise<_Res>;
- template<typename> friend class packaged_task;
- template<typename _Fn, typename... _Args>
- friend future<typename result_of<_Fn(_Args...)>::type>
- async(launch, _Fn&&, _Args&&...);
- typedef __basic_future<_Res> _Base_type;
- typedef typename _Base_type::__state_type __state_type;
- explicit
- future(const __state_type& __state) : _Base_type(__state) { }
- public:
- constexpr future() noexcept : _Base_type() { }
- /// Move constructor
- future(future&& __uf) noexcept : _Base_type(std::move(__uf)) { }
- // Disable copying
- future(const future&) = delete;
- future& operator=(const future&) = delete;
- future& operator=(future&& __fut) noexcept
- {
- future(std::move(__fut))._M_swap(*this);
- return *this;
- }
- /// Retrieving the value
- _Res
- get()
- {
- typename _Base_type::_Reset __reset(*this);
- return std::move(this->_M_get_result()._M_value());
- }
- shared_future<_Res> share();
- };
- /// Partial specialization for future<R&>
- template<typename _Res>
- class future<_Res&> : public __basic_future<_Res&>
- {
- friend class promise<_Res&>;
- template<typename> friend class packaged_task;
- template<typename _Fn, typename... _Args>
- friend future<typename result_of<_Fn(_Args...)>::type>
- async(launch, _Fn&&, _Args&&...);
- typedef __basic_future<_Res&> _Base_type;
- typedef typename _Base_type::__state_type __state_type;
- explicit
- future(const __state_type& __state) : _Base_type(__state) { }
- public:
- constexpr future() noexcept : _Base_type() { }
- /// Move constructor
- future(future&& __uf) noexcept : _Base_type(std::move(__uf)) { }
- // Disable copying
- future(const future&) = delete;
- future& operator=(const future&) = delete;
- future& operator=(future&& __fut) noexcept
- {
- future(std::move(__fut))._M_swap(*this);
- return *this;
- }
- /// Retrieving the value
- _Res&
- get()
- {
- typename _Base_type::_Reset __reset(*this);
- return this->_M_get_result()._M_get();
- }
- shared_future<_Res&> share();
- };
- /// Explicit specialization for future<void>
- template<>
- class future<void> : public __basic_future<void>
- {
- friend class promise<void>;
- template<typename> friend class packaged_task;
- template<typename _Fn, typename... _Args>
- friend future<typename result_of<_Fn(_Args...)>::type>
- async(launch, _Fn&&, _Args&&...);
- typedef __basic_future<void> _Base_type;
- typedef typename _Base_type::__state_type __state_type;
- explicit
- future(const __state_type& __state) : _Base_type(__state) { }
- public:
- constexpr future() noexcept : _Base_type() { }
- /// Move constructor
- future(future&& __uf) noexcept : _Base_type(std::move(__uf)) { }
- // Disable copying
- future(const future&) = delete;
- future& operator=(const future&) = delete;
- future& operator=(future&& __fut) noexcept
- {
- future(std::move(__fut))._M_swap(*this);
- return *this;
- }
- /// Retrieving the value
- void
- get()
- {
- typename _Base_type::_Reset __reset(*this);
- this->_M_get_result();
- }
- shared_future<void> share();
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement