次のコードが異なるコンパイラで異なる結果を出力するのはなぜですか?
#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
誰が正しいですか?そして、それはなぜですか?