On 08/12/2022 19:45, Jason Merrill via Gcc-patches wrote:
Tested x86_64-pc-linux-gnu, applying to trunk.
Bisecting shows this started to break
$ cat test.cc #include <initializer_list> template<typename> struct ConstCharArrayDetector; template<int N> struct ConstCharArrayDetector<char const[N]> { using Type = int; }; struct OUString { template<typename T> OUString(T &, typename ConstCharArrayDetector<T>::Type = 0); }; struct Sequence { Sequence(std::initializer_list<OUString>); }; Sequence f() { return {""}; }
$ g++ -fsyntax-only test.cc test.cc: In function ‘Sequence f()’: test.cc:8:26: error: no matching function for call to ‘OUString::OUString(const char* const)’ 8 | Sequence f() { return {""}; } | ^ test.cc:5:26: note: candidate: ‘template<class T> OUString::OUString(T&, typename ConstCharArrayDetector<T>::Type)’ 5 | template<typename T> OUString(T &, typename ConstCharArrayDetector<T>::Type = 0); | ^~~~~~~~ test.cc:5:26: note: template argument deduction/substitution failed: test.cc: In substitution of ‘template<class T> OUString::OUString(T&, typename ConstCharArrayDetector<T>::Type) [with T = const char* const]’: test.cc:8:26: required from here test.cc:5:26: error: invalid use of incomplete type ‘struct ConstCharArrayDetector<const char* const>’ test.cc:2:27: note: declaration of ‘struct ConstCharArrayDetector<const char* const>’ 2 | template<typename> struct ConstCharArrayDetector; | ^~~~~~~~~~~~~~~~~~~~~~ test.cc:4:8: note: candidate: ‘constexpr OUString::OUString(const OUString&)’ 4 | struct OUString { | ^~~~~~~~ test.cc:4:8: note: no known conversion for argument 1 from ‘const char* const’ to ‘const OUString&’ test.cc:4:8: note: candidate: ‘constexpr OUString::OUString(OUString&&)’ test.cc:4:8: note: no known conversion for argument 1 from ‘const char* const’ to ‘OUString&&’ test.cc:8:26: error: conversion from ‘const char* const’ to non-scalar type ‘const OUString’ requested 8 | Sequence f() { return {""}; } | ^