IS_TCHAR_ARRAY meaning

struct FTCharArrayTester
{
template
static char (&Func(const TCHAR(&)[N]))[2];
static char (&Func(…))[1];
};

#define IS_TCHAR_ARRAY(expr) (sizeof(FTCharArrayTester::Func(expr)) == 2)

What is the principle of these codes. I did not understand its implement.