Reputation: 951
Here:
http://en.cppreference.com/w/cpp/utility/functional/function
operator bool
is described: "Checks whether the stored callable object is valid".
Presumably a default constructed std::function
is not valid but is this the only case?
Also, how does it check whether it is valid?
Is the case where operator()
raises std::bad_function_call
exactly the case where the object is not valid?
Upvotes: 6
Views: 1876
Reputation: 503805
It's poorly written as is, your confusion is justified. By "valid" they mean "has a target".
A std::function
"has a target" when it's been assigned a function:
std::function<void()> x; // no target
std::function<void()> y = some_void_function; // has target
x = some_other_void_function; // has target
y = nullptr; // no target
x = y; // no target
They should have either defined "valid" before they used it, or simply stuck with the official wording.
Upvotes: 7
Reputation: 92231
The language standard says
explicit operator bool() const noexcept;
Returns: true if *this has a target, otherwise false.
Meaning that the function
has anything to call. The default constructed function
obviously does not.
Upvotes: 1