为什么下面的代码在不同的编译器上输出不同的结果?不同编译器上的输出不同
#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
谁是谁非?为什么这样呢?
顺便说一句,你打印'Bar :: foo',但是定义的函数有'Foo :: foo'。它是'Foo'命名空间中的一个自由函数,不是'Bar'的成员。 –
@Steve Jessop哦,是的,谢谢。但是,这不是我的问题 – FrozenHeart