Разное поведение у компиляторов
От: Nikita.Trophimov  
Дата: 18.12.12 04:45
Оценка:
Имеется вот такой код:

#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();
}


Output

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


Ну и кто прав? И почему происходит именно так?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.