Код: Выделить всё
B::). А чтобы не делать этого много раз, вместо этого можно использовать объявление использования.
Ниже код с таким объявлением использования:
template
struct A {
constexpr static int x = 0;
};
template
struct B : A {
// ok everywhere
constexpr static int y = B::x;
// ok in MSVC
using B::x;
constexpr static int z = x;
};
ошибка: ни один элемент с именем «x» в «B»
Однако Clang не видит никаких ошибок в y = B::x на одну строку выше. Онлайн-демо: https://gcc.godbolt.org/z/PvKW753M8
Какая реализация здесь правильная и почему?
Подробнее здесь: https://stackoverflow.com/questions/790 ... s-template