命名空间成员定义

Chu*_*dad 6 c++ namespaces definition member

namespace M{
   void f();
   void M::f(){}
}

int main(){}
Run Code Online (Sandbox Code Playgroud)

上面的代码给出了如下错误:

"ComeauTest.c",第3行:错误:名称空间成员声明中不允许使用限定名称void M :: f(){}

G ++也会出错.

VS2010编译好.

我的问题是:

a)预期的行为是什么?

b)$ 7.3.1.2似乎没有谈到这个限制.标准的哪一部分指导此类代码的行为?

Pra*_*rav 5

标准的哪一部分指导此类代码的行为?

C++ 03 Section $ 8.3说

除了成员函数(9.3)或其类外部的静态数据成员(9.4)的定义,命名空间外的函数或变量成员的定义或显式实例化之外,不应限定declarator-id.其名称空间,或其名称空间之外的先前声明的显式特化的定义,或作为另一个类或命名空间的成员的友元函数的声明(11.4).

所以你的代码是不正确的.

但是,在讨论问题548时 ,CWG同意取消在其名称空间内禁止合格的声明者1.

1:活跃问题482