FreeBSD Manual Pages
std::move_only_function(3) C++ Standard Libary std::move_only_function(3) NAME std::move_only_function - std::move_only_function Synopsis Defined in header <functional> template< class... > (1) (since C++23) class move_only_function; // not defined template< class R, class... Args > class move_only_function<R(Args...)>; template< class R, class... Args > class move_only_function<R(Args...) noexcept>; template< class R, class... Args > class move_only_function<R(Args...) &>; template< class R, class... Args > class move_only_function<R(Args...) & noexcept>; template< class R, class... Args > class move_only_function<R(Args...) &&>; template< class R, class... Args > class move_only_function<R(Args...) && noexcept>; (2) (since C++23) template< class R, class... Args > class move_only_function<R(Args...) const>; template< class R, class... Args > class move_only_function<R(Args...) const noexcept>; template< class R, class... Args > class move_only_function<R(Args...) const &>; template< class R, class... Args > class move_only_function<R(Args...) const & noexcept>; template< class R, class... Args > class move_only_function<R(Args...) const &&>; template< class R, class... Args > class move_only_function<R(Args...) const && noexcept>; Class template std::move_only_function is a general-purpose polymor- phic function wrapper. std::move_only_function objects can store and invoke any constructible (not required to be move constructible) Callable target functions, lambda expressions, bind expressions, or other function objects, as well as pointers to member functions and pointers to member objects. The stored callable object is called the target of std::move_only_function. If a std::move_only_function contains no target, it is called empty. Un- like std::function, invoking an empty std::move_only_function results in undefined behavior. std::move_only_functions supports every possible combination of cv- qualifiers, ref-qualifiers, and noexcept-specifiers not including volatile pro- vided in its template parameter. These qualifiers and specifier (if any) are added to its operator(). std::move_only_function satisfies the requirements of MoveCon- structible and MoveAssignable, but does not satisfy CopyConstructible or CopyAs- signable. Member types Type Definition result_type R Member functions constructor constructs a new std::move_only_function object (C++23) (public member function) destructor destroys a std::move_only_function object (C++23) (public member function) operator= replaces or destroys the target (C++23) (public member function) swap swaps the targets of two std::move_only_function ob- jects (C++23) (public member function) operator bool checks if the std::move_only_function has a target (C++23) (public member function) operator() invokes the target (C++23) (public member function) Non-member functions swap(std::move_only_function) overloads the std::swap algorithm (C++23) (function) operator== compares a std::move_only_function with nullptr (C++23) (function) Notes Implementations may store a callable object of small size within the std::move_only_function object. Such small object optimization is effectively required for function pointers and std::reference_wrapper special- izations, and can only be applied to types T for which std::is_nothrow_move_con- structible_v<T> is true. If a std::move_only_function returning a reference is initialized from a function or function object returning a prvalue (including a lambda expression without a trailing-return-type), the program is ill-formed because binding the returned reference to a temporary object is forbidden. See also std::function Notes. Feature-test macro Value Std Feature __cpp_lib_move_only_function 202110L (C++23) std::move_only_function Example // Run this code #include <functional> #include <future> #include <iostream> int main() { std::packaged_task<double()> packaged_task([](){ return 3.14159; }); std::future<double> future = packaged_task.get_future(); auto lambda = [task = std::move(packaged_task)]() mutable { task(); }; // std::function<void()> function = std::move(lambda); // Error std::move_only_function<void()> function = std::move(lambda); // OK function(); std::cout << future.get(); } Output: 3.14159 See also function wraps callable object of any copy constructible type with specified (C++11) function call signature (class template) http://cppreference.com 2024.06.10 std::move_only_function(3)
NAME | Synopsis | Member types | Member functions | Non-member functions | Notes | Example | Output: | See also
Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::move_only_function&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>
