#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;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGU8Y2hhci4uLiBDaD4Kc3RydWN0IENTdHJpbmcKewoJc3RhdGljIGNvbnN0IGNoYXIgdmFsdWVbc2l6ZW9mLi4uKENoKSArIDFdOwp9OwoKdGVtcGxhdGU8Y2hhci4uLiBDaD4KY29uc3QgY2hhciBDU3RyaW5nPENoLi4uPjo6dmFsdWVbc2l6ZW9mLi4uKENoKSArIDFdID0geyBDaC4uLiwgJ1wwJyB9OwoKdGVtcGxhdGU8dHlwZW5hbWUgUzAsIHR5cGVuYW1lIFMxPiBzdHJ1Y3QgU3RyY2F0OwoKdGVtcGxhdGU8Y2hhci4uLiBDaDAsIGNoYXIuLi4gQ2gxPgpzdHJ1Y3QgU3RyY2F0PENTdHJpbmc8Q2gwLi4uPiwgQ1N0cmluZzxDaDEuLi4+Pgp7Cgl0eXBlZGVmIENTdHJpbmc8Q2gwLi4uLCBDaDEuLi4+IHR5cGU7Cn07CgppbnQgbWFpbigpIHsKCXR5cGVkZWYgQ1N0cmluZzwnQycsICdoJywgJ2EnLCAncic+IFQwOwoJdHlwZWRlZiBDU3RyaW5nPCdGJywgJ2wnLCAnbycsICdhJywgJ3QnPiBUMTsKCXR5cGVkZWYgU3RyY2F0PFN0cmNhdDxUMCwgQ1N0cmluZzwnLCcsICcgJz4+Ojp0eXBlLCBUMT46OnR5cGUgVDI7Cgljb3V0IDw8IFQyOjp2YWx1ZSA8PCBlbmRsOwoJcmV0dXJuIDA7Cn0=