#include void consume_number(int i) { __builtin_printf("break here"); } int add(int i, int j) { // break here return i + j; } struct Callable { Callable(int num) : num_(num) {} void operator()(int i) const { __builtin_printf("break here"); } void member_function(int i) const { __builtin_printf("break here"); } int num_; }; int main() { // Invoke a void-returning function std::invoke(consume_number, -9); // Invoke a non-void-returning function std::invoke(add, 1, 10); // Invoke a member function const Callable foo(314159); std::invoke(&Callable::member_function, foo, 1); // Invoke a function object std::invoke(Callable(12), 18); }