On 12/8/22 19:41, 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 <vector> 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); }; std::vector<OUString> f() { return {""}; }
$ g++ -fsyntax-only test.cc In file included from .../include/c++/13.0.0/vector:65, from test.cc:1: .../include/c++/13.0.0/bits/stl_uninitialized.h: In instantiation of ‘constexpr bool std::__check_constructible() [with _ValueType = OUString; _Tp = const char* const&]’: .../include/c++/13.0.0/bits/stl_uninitialized.h:182:4: required from ‘_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = const char* const*; _ForwardIterator = OUString*]’ .../include/c++/13.0.0/bits/stl_uninitialized.h:373:37: required from ‘_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, allocator<_Tp>&) [with _InputIterator = const char* const*; _ForwardIterator = OUString*; _Tp = OUString]’ .../include/c++/13.0.0/bits/stl_vector.h:1690:33: required from ‘void std::vector<_Tp, _Alloc>::_M_range_initialize(_ForwardIterator, _ForwardIterator, std::forward_iterator_tag) [with _ForwardIterator = const char* const*; _Tp = OUString; _Alloc = std::allocator<OUString>]’ .../include/c++/13.0.0/bits/stl_vector.h:706:23: required from ‘std::vector<_Tp, _Alloc>::vector(_InputIterator, _InputIterator, const allocator_type&) [with _InputIterator = const char* const*; <template-parameter-2-2> = void; _Tp = OUString; _Alloc = std::allocator<OUString>; allocator_type = std::allocator<OUString>]’ test.cc:7:39: required from here .../include/c++/13.0.0/bits/stl_uninitialized.h:90:56: error: static assertion failed: result type must be constructible from input type 90 | static_assert(is_constructible<_ValueType, _Tp>::value, | ^~~~~ .../include/c++/13.0.0/bits/stl_uninitialized.h:90:56: note: ‘std::integral_constant<bool, false>::value’ evaluates to false