mercredi 25 août 2021

Static assert that a function returns a weakly ordered type

Minimal example:

template <typename TFunc>    
void func(TFunc f)
{
    //Do something like:
    double x{1}, y{2};
    bool z = f(x) < f(y);    //Do comparison somewhere
}

I would like to add a static_assert to the function that checks that f(x) returns a type where std::less computes. In other words I would like f(x) < f(y) to compile. I am currently doing something like this:

static_assert((decltype(f(0)){} < decltype(f(0)){}) == false, "Function f must return a weakly ordered type.");

But here I assume that the function returns a type that can be default initialized. Is there a better way to check this?

Aucun commentaire:

Enregistrer un commentaire