Функции с аргументами класса утекают из пространства имен?

У меня есть небольшой фрагмент кода для вашего рассмотрения, который меня сильно озадачивает. Странно то, что он компилируется и на Sun Studio, и на GCC, хотя я думаю, что этого не должно быть.

Учтите следующее:

namespace name
{
  class C
    {
      int a;
    };

  void f(C c);
  void g(int a);
}

int main(int argc, char** argv)
{
  name::C c;

  name::f(c); 
  f(c);  // <--- this compiles, strangely enough

  name::g(42);
  // g(42);  <--- this does not, as I expected
}

Аргумент класса из того же пространства имен вызывает утечку функции f 'вне пространства имен и быть доступным без name :: .

Есть ли у кого-нибудь объяснение этому? Конечно, здесь ошибаюсь я, а не компилятор.

22
задан Fred Nurk 4 February 2011 в 00:54
поделиться