I have a question regarding function matching. consider this code:
main.hpp:
struct Foo
{
Foo(double = 1.0)
{
std::cout << "Foo constructor\n";
}
operator double()
{
std::cout << "Foo double\n";
return double(1.0);
}
operator int()
{
std::cout << "Foo int\n";
return int(1);
}
};
void Bar(Foo &f)
{
std::cout << "Bar Foo\n";
}
void Bar(int)
{
std::cout << "Bar int\n";
}
main.cpp:
double d;
Bar(Foo(d));
output:
Foo constructor
Foo int
Bar int
however if i change void Bar(Foo &f)
to void Bar(const Foo &f)
, output changes to
Foo constructor
Bar Foo
I'm not sure why const
causes to call Bar(Foo)
instead of Bar(int)
even though Foo(d)
is not const
.