C++ 命名空间成员定义
上面的代码给出了如下错误: “ComeauTest.c”,第3行:错误: 中不允许使用限定名 名称空间成员 宣言 void M::f(){} 及 G++也给出了错误 但是 VS2010编译得很好 我的问题是: a) 预期的行为是什么 b) $7.3.1.2似乎没有提到这一限制。标准的哪一部分指导此类代码的行为 标准的哪一部分指导此类代码的行为 C++03节$8.3表示 声明器id不应被限定,除非其类外侧的成员函数(9.3)或静态数据成员(9.4)的定义,其命名空间外侧的函数或命名空间变量成员的定义或显式实例化,或者先前在其名称空间之外声明的显式专门化的定义,或者作为另一个类或命名空间的成员的友元函数的声明(11.4) 因此,您的代码格式不正确 然而,在讨论CWG时,一致认为应取消对其名称空间内的合格声明器的禁令1C++ 命名空间成员定义,c++,namespaces,definition,member,C++,Namespaces,Definition,Member,上面的代码给出了如下错误: “ComeauTest.c”,第3行:错误: 中不允许使用限定名 名称空间成员 宣言 void M::f(){} 及 G++也给出了错误 但是 VS2010编译得很好 我的问题是: a) 预期的行为是什么 b) $7.3.1.2似乎没有提到这一限制。标准的哪一部分指导此类代码的行为 标准的哪一部分指导此类代码的行为 C++03节$8.3表示 声明器id不应被限定,除非其类外侧的成员函数(9.3)或静态数据成员(9.4)的定义,其命名空间外侧的函数或命名空间变量成员的定
1:当前问题
7.3.1.2-2
专门讨论了这一点:
命名名称空间的成员也可以通过定义名称的显式限定(3.4.3.2)在该名称空间之外定义,前提是定义的实体已经在名称空间中声明,并且定义出现在包含声明名称空间的名称空间中的声明点之后。
M::f
被认为是命名空间定义之外的定义
namespace M{
void f();
void M::f(){}
}
int main(){}