But this is 'fragile' code as first, second contain the memory addresses of x and y - which are only valid as long as x & y are in scope (hence static for x & y). Not a 'deep copy' of the contents. Also any changes to first/second are also reflected in x & y. Not recommended. Don't use c-style char arrays!
no they weren't. T1 is char[3], T2 is char[6].
clang's error message is probably more helpful
1 2 3 4 5 6 7 8 9
prog.cc:6:43: error: cannot initialize an array element of type 'char' with an lvalue of type 'char const[3]'
Pair1(const T1& x, const T2& y) : first{ x }, second{ y } {}
^
prog.cc:14:8: note: in instantiation of member function 'Pair1<char [3], char [6]>::Pair1' requested here
Pair1 p0{ x,y };
^
prog.cc:6:56: error: cannot initialize an array element of type 'char' with an lvalue of type 'char const[6]'
Pair1(const T1& x, const T2& y) : first{ x }, second{ y } {}
^