Is it correct to define a function foo that takes as its input a callable as follows:
template< typename callable_t >
void foo( callable_t f )
{
// code that calls f
}
Do we need any type traits to ensure that f is a callable? I would say "no" since the compiler will throw an error in case that I pass, for example, an int to foo and try to call it.
What do you think?