枚举在C ++ 03

时间:2016-12-26 12:06:30

标签: c++ c++03

为什么以下代码段在C ++ 03中不合法?

template <typename T>
void poison(T& x) {}

int main() {
    enum Enum { A, B, C };
    Enum e = A;
    poison(e);
    return 0;
}

gcc 5.4 C ++ 03模式下的编译器输出:https://godbolt.org/g/6hKc7F

如果我将Enum移到main()之外,它在C ++ 03模式下编译得很好。或者,如果我启用C ++ 11,它也可以很好地编译。

C ++ 03和C ++ 11之间的范围规则如何变化,以至于此代码现在有效?

0 个答案:

没有答案