Это простой Progs шаблона, который я написал для изучения C++:неявного преобразования от истинного значения для STD :: true_type
#include <type_traits>
#include <iostream>
using namespace std;
template<typename T>
T foo(T t, true_type)
{
cout << t << " is integral! ";
return 2 * t;
}
template<typename T>
T foo(T t, false_type)
{
cout << t << " ain't integral! ";
return -1 * (int)t;
}
template<typename T>
T do_foo(T t){
return foo(t, is_integral<T>());
}
int main()
{
cout << do_foo<int>(3) << endl;
cout << do_foo<float>(2.5) << endl;
}
Он не делает ничего, чтобы фантазии, но это компилировать и работать.
Мне интересно, как работает часть is_integral<T>()
?
Я читал это: http://en.cppreference.com/w/cpp/types/is_integral и я не могу найти какого-либо конкретного описания такого поведения - не определение operator()
Это не вызов 'operator()', он создает временную, как 'int()'. – jrok