It returns an rvalue reference to arg, unless copying is a better option than moving to provide at least a strong exception guarantee.
DeclarationFollowing is the declaration for std::move_if_noexcept function.
template <class T> typename conditional < is_nothrow_move_constructible<T>::value || !is_copy_constructible<T>::value, T&&, const T& >::type move_if_noexcept(T& arg) noexcept;C++11
template <class T> typename conditional < is_nothrow_move_constructible<T>::value || !is_copy_constructible<T>::value, T&&, const T& >::type move_if_noexcept(T& arg) noexcept;Parameters
arg − It is an object.
Return ValueIt returns an rvalue reference to arg, unless copying is a better option than moving to provide at least a strong exception guarantee.
ExceptionsBasic guarantee − This function never throws exceptions.
Data racesCalling this function introduces no data races.
ExampleIn below example explains about std::move_if_noexcept function.
#include <iostream> #include <utility> struct Bad { Bad() {} Bad(Bad&&) { std::cout << "Throwing move constructor called\n"; } Bad(const Bad&) { std::cout << "Throwing copy constructor called\n"; } }; struct Good { Good() {} Good(Good&&) noexcept { std::cout << "Non-throwing move constructor called\n"; } Good(const Good&) noexcept { std::cout << "Non-throwing copy constructor called\n"; } }; int main() { Good g; Bad b; Good g2 = std::move_if_noexcept(g); Bad b2 = std::move_if_noexcept(b); }
Let us compile and run the above program, this will produce the following result −
Non-throwing move constructor called Throwing copy constructor called
utility.htm
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4