Простая программа, как показано ниже, вообще без синтаксиса c ++ 11 (e.cpp)
#include<iostream>
using namespace std;
namespace m{
class my{
public:
enum A{
u=1,
v=2,
w=3
};
static A f(A a){
return (A)(a + A::u);
}
};
int main(){
using namespace m;
my::A r=my::f(my::u);
return 0;
}
Использование g ++ 4.1.2 для ее компиляции:
e.cpp:17:2: warning: no newline at end of file
e.cpp: In static member function ‘static m::my::A m::my::f(m::my::A)’:
e.cpp:11: error: expected primary-expression before ‘)’ token
e.cpp:11: error: ‘A’ is not a class or namespace
Использование g ++ 4.9.2 с -std = c ++ 98
g++ e.cpp -std=c++98
e.cpp: In static member function ‘static m::my::A m::my::f(m::my::A)’:
e.cpp:11:36: error: ‘A’ is not a class or namespace
static A f(A a){return (A)(a + A::u);}
^
Но использовать -std = c ++ 11 можно:
g++ e.cpp -std=c++11
Чтобы его скомпилироватьиспользуя c ++ 98, я изменяю его, чтобы избежать "A ::":
static A f(A a){return (A)(a + u);}
Так что кажется, что в c ++ 98 встроенный класс enum не распознается внутри класса, тогда как вс ++ 11 это работает.Это разница в разрешении enum или какая-то предыдущая ошибка синтаксиса в стандарте c ++ 98?