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.
Consider moving this up to around line 144 (just after the definition of ::IsStringInit).