Ошибка GCC во время оценки вложенного доступа во время компиляции через указатель на член - PullRequest
4 голосов
/ 15 апреля 2019

Это принято 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?

Поведение выглядит одинаково на всех версиях GCC, поддерживающих C ++ 11.

...