Unable to modernize these C-style casts

Viewed 25

Code:

int CChristianLifeMinistryEditorDlg::CompareDate(const void* pArg1, const void* pArg2)
{
    const STUDENT_ASSIGN_HIST_S* psAssign1 = *((STUDENT_ASSIGN_HIST_S * *)pArg1);
    const STUDENT_ASSIGN_HIST_S* psAssign2 = *((STUDENT_ASSIGN_HIST_S * *)pArg2);
    int                 iGreater = 0; // assume they are the same

    if (psAssign1->datMeeting < psAssign2->datMeeting)
        iGreater = -1;
    else if (psAssign1->datMeeting > psAssign2->datMeeting)
        iGreater = 1;

    return iGreater;
}

I am struggling to work out how to modernize the C-style casts:

const STUDENT_ASSIGN_HIST_S* psAssign1 = *((STUDENT_ASSIGN_HIST_S * *)pArg1);
const STUDENT_ASSIGN_HIST_S* psAssign2 = *((STUDENT_ASSIGN_HIST_S * *)pArg2);

I tried:

const STUDENT_ASSIGN_HIST_S* psAssign1 = *(static_cast<STUDENT_ASSIGN_HIST_S * *>(pArg1));
const STUDENT_ASSIGN_HIST_S* psAssign1 = *(reinterpret_cast<STUDENT_ASSIGN_HIST_S * *>(pArg1));

And it both instances VS told me it was an invalid cast.

1 Answers

You can try this:

typedef const STUDENT_ASSIGN_HIST_S* PCSAHS;

//...

PCSAHS psAssign1 = *(static_cast<const PCSAHS*>(pArg1));

pArg1 has const qualifier, so it needs to be preserved when casting.

Related