What causes std::bad_function_call?

2019-02-07 17:54发布

I've seen a few questions that refer to the std::bad_function_call exception, but haven't been able to find out any by Googling about what causes this exception.

What kind of behavior is supposed to cause this exception? Can you give me minimal examples that don't have other semantic problems also going on?

4条回答
欢心
2楼-- · 2019-02-07 18:12

"Performing a function call without having a target to call throws an exception of type std::bad_function_call"

    std::function<void(int,int)> f;
    f(33,66); // throws std::bad_function_call

No credits to me....its Nicolai Josuttis Pundit of C++ Standard Lib

查看更多
甜甜的少女心
3楼-- · 2019-02-07 18:17

Sure- the easiest is where you try to call a std::function that's empty.

int main() {
    std::function<int()> intfunc;
    int x = intfunc(); // BAD
}
查看更多
Viruses.
4楼-- · 2019-02-07 18:19

in my case was the problem was in capture list. i have a recursive lambda function.

//decl
std::function<void(const SBone*, const core::vector3df&, const core::quaternion&)> f_build;
f_build = [&f_build](const SBone* bone, const core::vector3df& pos, const core::quaternion& rot)
{
...
}

missing & from f_build in capture list generate a bad call.

查看更多
叼着烟拽天下
5楼-- · 2019-02-07 18:24

Call of a temporary function also can throw:

struct F
{
    const std::function<void()>& myF;

    F(const std::function<void()>& f) : myF(f) {}

    void call()
    {
        myF();
    }
};

int main()
{
    F f([]{ std::cout << "Hello World!" << std::endl;});

    f.call();

    return 0;
}

But this depend on compiler (vc++ throws, g++ not).

查看更多
登录 后发表回答