The function TryListConversion didn't properly validate the following part of the standard:
Otherwise, if the parameter type is a character array [... ] and the initializer list has a single element that is an appropriately-typed string literal (8.5.2 [dcl.init.string]), the implicit conversion sequence is the identity conversion.
This caused the following call to f() to be ambiguous.
void f(int(&&)[1]); void f(unsigned(&&)[1]); void g(unsigned i) { f({i}); }
This issue only occurrs when the initializer list had one element.
isCharType is too narrow a check here. We also need to check for all the other types that can be initialized from a string literal (wchar_t, char16_t, ... -- including unsigned short in some cases). These details are handled by [IsStringInit](https://github.com/llvm/llvm-project/blob/master/clang/lib/Sema/SemaInit.cpp#L136). Maybe it's worth exposing that as a bool Sema::isStringInit function or similar to use from here?