模板参数为bool,std::true_type,std::false_type
std::true_type和std::false_type是两个不同类型,bool是一个类型,true和false是bool类型的两个值
#include <iostream>
#include <type_traits>
template <typename T>
void fun_bool(T& val, std::true_type)
{
std::cout << "val:" << val << "\ttrue\n";
}
template <typename T>
void fun_bool(T& val, std::false_type)
{
std::cout << "val:" << val << "\tfalse\n";
}
template <typename T>
void fun(const T& val)
{
//如果T是指针类型调用true,否则调用false
fun_bool(val, std::is_pointer<T>());
}
template <bool b>
void test()
{
if (b)
std::cout << "true\n";
else
std::cout << "false\n";
}
int main()
{
int i = 1;
fun(&i); //true
fun(2); //false
test<true>(); //test只能用bool类型的值实例化
//test<int>(); //错误
//test(); //错误
return 0;
}