Added constraint on type parameter T: must be a derived class (implementing the CRTP: curiously recurring template pattern)