Я пытаюсь написать CRTP, чтобы содержать static constexpr
производного типа, поскольку это невозможно сделать только с одним классом. Этот код компилируется в GCC, но clang жалуется, что Derived
является неполным типом. Какой из них прав?Является ли определение класса полным, когда оно передается базовому классу?
template<class T>
class Base {
public:
static constexpr T a = T(1), b = T(20);
};
class Derived : public Base<Derived> {
public:
int x;
constexpr Derived(int x) : x(x) {}
};
Будьте осторожны в конструкторе Derived, локальная переменная x и член имеют одно и то же имя. – Brahim
Я просто хочу указать, что сохранение производных объектов как статических внутри базового класса - не самая лучшая идея .. –
Единственная причина для этого это потому, что я не могу поставить 'static constexpr' типа' Derived' в 'Derived'. Я хотел бы сделать это: 'Derived :: a' вместо того, что-то вроде' Derived :: constants :: a'. – user975989