#include <iostream>
using namespace std;

void func(int i);

template<typename T>
void func(T i);

template <> 
void func(int i);


int main() {
	func(5.0);
	func(5);
	func<int>(5);
	func<int>(5.0);
	func((int)5.0);
	
	return 0;
}

void func(int i){
	cout << "non-template func" << endl;
}

template<typename T>
void func(T i){
	cout << "Base template func" << endl;
}

template <> 
void func(int i){
	cout << "specialized int template func" << endl;
}