C ++: com CRTP, a classe definida na classe derivada não está acessível na classe base

qui está a classe base (simplificada):

template <class T>
class SharedObject
{
protected:
    QExplicitlySharedDataPointer <typename T::Data> d;
};

E aqui está o derivado:

class ThisWontCompile : public SharedObject <ThisWontCompile>
{
private:
    friend class SharedObject;
    struct Data : public QSharedData
    {
        int id;
    };
};

Existe alguma solução alternativa para acessarThisWontCompile :: Data a partir de SharedObject? O que exatamente pode e o que exatamente não pode ser feito com o objeto derivado do objeto base?

questionAnswers(1)

yourAnswerToTheQuestion