#include <iostream>
using namespace std;

template<char... Ch>
struct CString
{
	static const char value[sizeof...(Ch) + 1];
};

template<char... Ch>
const char CString<Ch...>::value[sizeof...(Ch) + 1] = { Ch..., '\0' };

template<typename S0, typename S1> struct Strcat;

template<char... Ch0, char... Ch1>
struct Strcat<CString<Ch0...>, CString<Ch1...>>
{
	typedef CString<Ch0..., Ch1...> type;
};

int main() {
	typedef CString<'C', 'h', 'a', 'r'> T0;
	typedef CString<'F', 'l', 'o', 'a', 't'> T1;
	typedef Strcat<Strcat<T0, CString<',', ' '>>::type, T1>::type T2;
	cout << T2::value << endl;
	return 0;
}