Answer
This question is compilable and deterministic.
Its output is “22”.
Explanation
A string literal is not a std::string
, but a const char[]
. If the compiler was to choose f(const std::string&)
, it would have to go through a user defined conversion and create a temporary std::string
. Instead, it prefers f(const void*)
, which requires no user defined conversion.