dimanche 15 septembre 2019

C++ template function that takes float or double

I want to write a template function that will work on both double and float, something like that:

template <typename T>
constexpr auto someCalc(const T x) {
    return x * 4.0 + 3.0;
}

My issue is that both 4.0 and  3.0 are doubles literal, thus I get the following error on clang:

error: implicit conversion increases floating-point precision: 'const float' to 'double' [-Werror,-Wdouble-promotion]

Is there an elegant way to write this code without having the up-conversion to double? The best I can come up with, is this

template <typename T>
constexpr auto someCalc(const T x) {
    constexpr T four = 4.0;
    constexpr T three = 3.0;
    return x * four + three;
}

which I find less readable and harder to maintain for larger/more complicated function.

Aucun commentaire:

Enregistrer un commentaire