/**Makros*/

#define min_m(X, Y)  ((X) < (Y) ? (X) : (Y))

template <class T>
T min_t (T x,T y)
{
	return x<y?x:y;
}

/**C++ meta programming*/

#include <iostream>

template <int a, int b>
struct add {
	static const int value;
};

template <int a, int b>
int const add<a,b>::value=a+b;

template <int>
class correct;


//specialization
template <> class correct<10> {};

int main()
{
	const int i = 10;
	correct<i> t; // i is 10 and certainly 10
	std::cout << add<3,6>::value << std::endl;
}


