模板参数为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;
}
原文地址:https://www.cnblogs.com/mmmmmmmmm/p/15569434.html