Следующий код прекрасно компилируется с последними версиями MSVC, GCC и CLang, доступными на сайте исследователя компиляторов godbolt.Интересно, почему:
namespace ns
{
struct Test
{
void foo();
};
}
using namespace ns;
// Alert! Member function defined outside its namespace!
void Test::foo()
{
}
int main()
{
ns::Test obj;
obj.foo();
return 0;
}
cppreference утверждает, что если функция-член определена вне своего класса, то она должна быть определена в пространстве имен этого класса.См. Самый верх страницы cppreference о функциях-членах .
Но, тем не менее, компиляторы принимают код.Маловероятно, что все три независимых компилятора имеют одну и ту же ошибку, верно?Итак, есть ли веская причина для того, чтобы они приняли такой код?