int res(int n)
{
return 55;
}
int main(){
cout<< res;
return 0;
}
I expected it to produce an error, but it printed 1.
When you refer to a function by its name alone, you get a pointer to that function.
operator<<
does not have an overload that accepts any arbitrary function pointer. It has an overload that accepts a void*
pointer (which a function pointer is not implicitly convertible to), and overloads which accept pointers to functions that operate on output streams (which your function does not).
However, operator<<
does have an overload that accepts a bool
, and there is an implicit conversion defined from a function pointer to a boolean. So, you end up with a boolean value of true
(which gets printed as an integer 1
unless you use the std::boolalpha
I/O manipulator) because the function pointer is not null.