#include <iostream>
#include <type_traits>
template <typename T>
void do_stuff(std::enable_if_t<std::is_integral<T>::value, T> &t) {}
template <typename T>
void do_stuff(std::enable_if_t<std::is_class<T>::value, T> &t) {}
int main() {
// your code goes here
int i = 1;
do_stuff(i);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kdm9pZCBkb19zdHVmZihzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfaW50ZWdyYWw8VD46OnZhbHVlLCBUPiAmdCkge30KCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgp2b2lkIGRvX3N0dWZmKHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19jbGFzczxUPjo6dmFsdWUsIFQ+ICZ0KSB7fQoKaW50IG1haW4oKSB7CgkvLyB5b3VyIGNvZGUgZ29lcyBoZXJlCglpbnQgaSA9IDE7Cglkb19zdHVmZihpKTsKCXJldHVybiAwOwp9
prog.cpp: In function 'int main()':
prog.cpp:13:12: error: no matching function for call to 'do_stuff(int&)'
do_stuff(i);
^
prog.cpp:5:6: note: candidate: template<class T> void do_stuff(std::enable_if_t<std::is_integral<_Tp>::value, T>&)
void do_stuff(std::enable_if_t<std::is_integral<T>::value, T> &t) {}
^
prog.cpp:5:6: note: template argument deduction/substitution failed:
prog.cpp:13:12: note: couldn't deduce template parameter 'T'
do_stuff(i);
^
prog.cpp:8:6: note: candidate: template<class T> void do_stuff(std::enable_if_t<std::is_class<T>::value, T>&)
void do_stuff(std::enable_if_t<std::is_class<T>::value, T> &t) {}
^
prog.cpp:8:6: note: template argument deduction/substitution failed:
prog.cpp:13:12: note: couldn't deduce template parameter 'T'
do_stuff(i);
^