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.
W
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).
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.
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
}
"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