#include <iostream>
using namespace std;

template<typename Type, int FixedTemplatedValue>
void TemplatedFunc(Type value)
{
	std::cout << "Fixed templated value: " << FixedTemplatedValue
	          << "\tPassed in changable value: " << value << std::endl;
}

int main()
{
	auto FuncSeventeen = &TemplatedFunc<std::string, 17>;
	auto FuncTwoHundred = &TemplatedFunc<float, 200>;
	
	//NOTE: These functions always print "17" as their fixed value, 
	//because it's now BUILT INTO the function.
	//They also always take a std::string as their first parameter, because it's BUILT IN at compile time,
	//but they let you decide at run time what the value of that string is.
	FuncSeventeen("Meow");
	FuncSeventeen("Purr"); 
	
	//NOTE: These functions always print "200" as their fixed value, 
	//because it's now BUILT INTO the function.
	//They also always take a float as their first parameter, because it's BUILT IN at compile time,
	//but they let you decide at run time what the value of that float is.
	FuncTwoHundred(0.257f);
	FuncTwoHundred(1.5f);   
	
	return 0;
}