vendredi 27 novembre 2015

Should I declare wrappers for C functions noexcept?

Suppose you have a C++ function that only makes calls to C functions, like

int ClearTheBin()
{
    int result = SHEmptyRecycleBinW(
        nullptr,
        nullptr,
        SHERB_NOCONFIRMATION |
        SHERB_NOPROGRESSUI |
        SHERB_NOSOUND);

    if (SUCCEEDED(result) ||
        result == E_UNEXPECTED) // Already empty
    {
        return 0;
    }

    return result;
}

There are obviously a zillion different things that could go wrong with the call to the C function, but since C lacks exceptions such errors will be stored in the resulting code. My question is: should such functions be declared noexcept? Even if the method can't throw, it may give the reader the false impression "Nothing can go wrong with this function and I can assume it's 100% reliable," because that's usually what noexcept functions imply.

What's your thoughts on the matter?

Aucun commentaire:

Enregistrer un commentaire