Maneira padrão de encontrar o endereço base do struct de um membro

struct Data {
    int a;
    std::string b;
    float c;
};

std::string* allocateDataAndGetString() {
    Data* dataPtr(someAllocator.allocate<Data>());
    return &dataPtr.b;
}

Data* getBaseDataPtrFromString(std::string* mStringMember) {
    // ???
}

int main() {
    std::string* stringPtr(allocateDataAndGetString());
    Data* dataPtr(getBaseDataPtrFromString
}

eu tenho umData instância alocada no heap e um ponteiro para suastd::string b; membro. Como obtenho o endereço base doData Por exemplo, se a string é membro, levando em consideração compensações e preenchimentos, de maneira padrão?

Eu tentei subtrairsizeof(int) estd::offsetof(Data, std::string) destd::string* ponteiro, mas não consegui fazê-lo funcionar.

questionAnswers(4)

yourAnswerToTheQuestion