Sto provando a scrivere un CRTP per contenere un static constexpr
del tipo derivato, poiché è impossibile farlo con una sola classe. Questo codice si compila bene in GCC, ma clang si lamenta che Derived
è un tipo incompleto. Quale è giusto?Una definizione di classe è completa quando viene passata a una classe base?
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) {}
};
Fare attenzione al costruttore di Derived la variabile locale x e il membro hanno lo stesso nome – Brahim
Voglio solo sottolineare che mantenere gli oggetti derivati come statici all'interno della classe base non è l'idea migliore .. –
L'unico motivo per farlo in questo modo non posso mettere un 'constexpr' statico del tipo' Derivato' in 'Derivato'. Volevo essere in grado di farlo: 'Derived :: a' invece di qualcosa come' Derived :: constants :: a'. – user975989