Рассмотрим следующую программу на C ++:
class A
{
protected:
int x;
};
template<typename X>
using B = A;
template<typename T>
class C : public B<T>
{
public:
void f()
{
x = 0;
}
};
int main()
{
}
При компиляции с помощью clang и gcc с использованием -std=c++17 -pedantic-errors
в качестве параметров компиляции они ведут себя по-разному: Clang компилируется без каких-либо ошибок, но gcc выдает ошибку компиляции о невозможности поиска идентификатора x
.
Что в этом случае говорит стандарт c ++? Разрешены ли оба поведения, или в этом случае в одном из компиляторов есть ошибка?
Ссылка на обозреватель компилятора: https://godbolt.org/z/EYvYrr
In the definition of a class template or a member of a class template, if a base class of the class template depends on a template-parameter, the base class scope is not examined during unqualified name lookup either at the point of definition of the class template or member or during an instantiation of the class template or member.
- person t.niese   schedule 06.09.2020