Эта короткая программа С++ 17:
#include <iostream>
template <typename T> void output(T x)
{
if constexpr (std::is_integral<decltype(x)>::value) {
std::cout << static_cast<int>(x) << " is integral" << std::endl;
} else {
std::cout << x << " is not integral" << std::endl;
}
}
int main()
{
char x = 65;
output(x);
bool t = true;
output(t);
return 0;
}
Имеет этот выход:
65 is integral
1 is integral
В функции шаблона с именем output
, как можно обнаружить, что аргумент x
является логическим, а не числом?
План состоит в том, чтобы вывести значение с помощью std::cout << std::boolalpha <<
, но только если тип bool
.