Я пытаюсь написать такую функцию, чтобы f<T>(args..)
возвращал первый параметр типа T
.
Следующая программа, кажется, всегда выбирает первую специализацию, таким образом печатая 97
(код ASCII 'a'
).Хотя второй не потребует преобразования char
в int
.Может кто-нибудь объяснить, пожалуйста, поведение?
Я новичок в SFINAE и метапрограммировании.
#include <iostream>
using namespace std;
template <typename T, typename ...Ts>
T f(T a, Ts... args) {
return a;
}
template <typename R, typename T, typename ...Ts>
R f(typename enable_if<!is_same<R, T>::value, T>::type a, Ts... args) {
return f<R>(args...);
}
int main() {
cout << f<int>('a', 12);
}