samedi 24 février 2018

Can I call a method directly on the result of user-defined literal?

I tried invoking a method directly on the result of the user-defined literal, but my results varied depending on the compiler.

#include <string>

std::string operator ""_test(unsigned long long value)
{
    return std::to_string(value);
}

int main()
{
    1000_test.size();   // 1) NOK on Clang/GCC, OK on MSVC
    (1000_test).size(); // 2) OK everywhere
    1000_test + "a";    // 3) OK overywhere
}

Demo on Godbolt

Case 1) seems odd, since the compilers seem to disallow defining _test.size user-defined literal.

So which compiler is correct here for the 1) case? What does the standard say?

Aucun commentaire:

Enregistrer un commentaire