为什么以下代码段在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之间的范围规则如何变化,以至于此代码现在有效?