Рассмотрим следующий код:
template<typename T>
struct S { static constexpr int bar = T::foo; };
struct U: S<U> { static constexpr int foo = 42; };
int main() { }
GCC v6.1 компилирует его, clang 3.8 отклоняет его с ошибкой:
2: ошибка: ни один член с именем 'foo' в 'U'
struct S {static constexpr int bar = T:: foo; };
Какой компилятор прав?
Это может быть связано с тем, что U
не является полным типом в точке, где мы пытаемся использовать его в S
? < ш > В этом случае его следует рассматривать как ошибку GCC, но я хотел бы знать, буду ли я раньше, чтобы искать/открывать проблему в трекере ошибок...
ИЗМЕНИТЬ
Между тем я открыл bug для GCC.
Ожидая ответа на этот вопрос.