dimanche 19 mai 2019

Why the default value is needed for `std::enable_if`?

Why I have to use the default value (::type = 0) in this std::enable_if usage?

I see examples, where it works without it. for example https://foonathan.net/blog/2015/11/30/overload-resolution-4.html

template <typename T,
          typename std::enable_if<std::is_integral<T>::value, T>::type = 0>
void do_stuff(T t) {
    std::cout << "do_stuff integral\n";
}

template <typename T,
          typename std::enable_if<std::is_class<T>::value, T>::type = 0>
void do_stuff(T t) {
    std::cout << "do_stuff class\n";
}

int main()
{
    do_stuff(32);
    return 0;
}

I got error message:

temp.cpp:7:6: note:   template argument deduction/substitution failed:
temp.cpp:40:13: note:   couldn't deduce template parameter ‘<anonymous>’

It should be deduced to

template <template T, int>
void do_stuff(T t)

which is a valid code. What I'm doing wrong? (gcc version 7.4.0)

Aucun commentaire:

Enregistrer un commentaire