Определение члена пространства имен

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

int main(){}

Приведенный выше код дает такую ​​ошибку:

"ComeauTest.c", строка 3: ошибка: полное имя не допускается в член пространства имен декларация void M :: f () {}

И

G ++ также выдает ошибку.

Но

VS2010 компилируется нормально.

Мои вопросы:

a) Каково ожидаемое поведение?

b) $ 7.3.1.2, похоже, не говорит об этом ограничении. Какая часть стандарта определяет поведение такого кода?

6
задан aschepler 24 November 2010 в 13:49
поделиться