// ============================================================================
//  p1c05_02  —  5.3 函数模板和普通函数区别
//  来源：川大 C++/LinuxC wiki「02.Qt方向」
//  说明：本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
//        // --- 原文片段 [pageId:blockIdx] --- 标注出处。
//        已做最小修正（笔误/平台移植），详见 docs/ERRATA.md。
// ============================================================================

#include <iostream>
using namespace std;

// --- 原文片段 [58954472:1]  5.3 函数模板和普通函数区别 ---
//函数模板
template<class T>
T MyPlus_1(T a, T b){
	T ret = a + b;
	return ret;
}

//普通函数
int MyPlus_1(int a,char b){
	int ret = a + b;
	return ret;
}

void test02(){

	int a = 10;
	char b = 'a';

	//调用函数模板，严格匹配类型
	MyPlus_1(a, a);
	MyPlus_1(b, b);
	//调用普通函数
	MyPlus_1(a, b);
	//调用普通函数  普通函数可以隐式类型转换
	MyPlus_1(b, a);

	//结论：
	//函数模板不允许自动类型转换，必须严格匹配类型
	//普通函数可以进行自动类型转换
}

// --- main ---
int main() {
    test02();
    return 0;
}
