为什么下面的代码在不同的编译器上打印出不同的结果?
#include <iostream>
void foo() { std::cout << "::foo() \n"; }
namespace Foo
{
struct Bar
{
friend void foo() { std::cout << "Bar::foo() \n"; }
void bar() { foo(); }
void baz();
};
void Bar::baz() { foo(); }
}
int main()
{
Foo::Bar instance;
instance.bar();
instance.baz();
}
输出
GCC 4.7.2
::foo() ::foo()
MSVC-10.0
Bar::foo() Bar::foo()
MSVC-11.0
error C3861: 'foo': identifier not found error C3861: 'foo': identifier not found
谁是对的?为什么会这样?