C ++: con CRTP, la clase definida en la clase derivada no es accesible en la clase base

Aquí está la clase base (simplificada):

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

Y aquí está el derivado:

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

¿Hay alguna solución para accederThisWontCompile :: Data desde SharedObject? ¿Qué puede y qué no puede hacerse exactamente con el objeto derivado del objeto base?

Respuestas a la pregunta(1)

Su respuesta a la pregunta