dpj
dpj

Reputation: 951

what is a 'valid' std::function?

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

Answers (2)

GManNickG
GManNickG

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

Bo Persson
Bo Persson

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

Related Questions