这是Clang接受的,但GCC不接受:
struct inner {int x;};
constexpr struct outer {inner i;} o{};
// definition of x4 results in GCC error:
// "accessing value of 'o' through a 'const int' glvalue in a constant expression"
constexpr int x1 { &(o.i)->*(&inner::x)}; // ok
constexpr int x2 { (&o->*(&outer::i)).x }; // ok
int x3 {&(&o->*(&outer::i))->*(&inner::x)}; // ok
constexpr int x4 {&(&o->*(&outer::i))->*(&inner::x)}; // error
在constexpr中允许这种访问吗?
在所有支持C ++ 11的GCC版本上,行为似乎都是相同的。