这个问题类似于这一个,但更具体的预C ++ 11种的情景。
我注意到使用 Clang 和 g++,以下编译器可以在 pre-c++11 中正常运行:
enum En { V0 = 0 };
template <int SZ> class C { };
template <En EN> class E { };
int main() {
const int SIZE = 42;
C<SIZE> c;
const int SIZE2 = SIZE ^ 0xDEADBEEF;
C<SIZE2> c2;
const En E1 = V0;
E<E1> e1;
}
Run Code Online (Sandbox Code Playgroud)
在没有constexpr可用的上下文中,这样做非常方便,在某些情况下甚至可能是必要的。那么这是否保证有效,还是 g++ 和 Clang 只是为了方便而推断这些值?