I have a small piece of code here for your consideration which puzzles me quite a lot. The strange thing is that it compiles on both Sun Studio and GCC even though I think it sh
It's due to "argument dependent lookup". Removing the const will not change the behavior you're seeing. To demonstrate that it's ADL, try moving the St struct outside of the namespace...
struct St
{
int a;
};
namespace name
{
void f(const St& st);
void g(int a);
}
int main(int argc, char** argv)
{
St st;
name::f(st);
f(st); // <--- now you will get the expected compile error
name::g(42);
// g(42); <--- this does not, as I expected
}