模板参数为bool,std::true_type,std::false_type


std::true_type和std::false_type是两个不同类型,bool是一个类型,true和false是bool类型的两个

#include 
#include 

template 
void fun_bool(T& val, std::true_type)
{
	std::cout << "val:" << val << "\ttrue\n";
}

template 
void fun_bool(T& val, std::false_type)
{
	std::cout << "val:" << val << "\tfalse\n";
}

template 
void fun(const T& val)
{
	//如果T是指针类型调用true,否则调用false
	fun_bool(val, std::is_pointer());
}

template 
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();   //test只能用bool类型的值实例化
	//test();  //错误
	//test();       //错误

	return 0;
}