void g(int& a)
{
std::cout<<\"int&\\n\";
}
void g(int a)
{
std::cout<<\"int\\n\";
}
int main()
{
int a = 2;
g(a); //w
This answer relates to the question as it was when I answered.
The OP keeps adding to the question, and I'm not going to chase that…
Yes there is, and yes, you're right that it involves casting to resolve the ambiguity:
#include
void g(int& a)
{
std::cout<<"int&\n";
}
void g(int a)
{
std::cout<<"int\n";
}
int main()
{
int a = 2;
static_cast< void(*)(int&) >( g )( a );
}
Note: to run this in Visual Studio and see the result window, either use [Ctrl F5], or place a breakpoint on the last right brace of main and run it in the debugger. But better, just run it from the command line. No need to add a “stop” at the end! :-)
const to call the by-value argument overload. I didn't even think of that, but if you want to do that (it's limited to cutting off the by-reference version from consideration), do use a const_cast instead of a static_cast.
Or better, just make an rvalue expression out of the argument, e.g. by adding a handy little + sign in front,
g( +a );
:-)