A typo in
r15-4473-g3abe751ea86e34 made it ill-formed to use
std::uninitialized_fill with iterators that aren't pointers (or pointers
wrapped in our __normal_iterator) if the value type is a narrow
character type.
libstdc++-v3/ChangeLog:
PR libstdc++/120931
* include/bits/stl_uninitialized.h (__uninitialized_fill<true>):
Fix typo resulting in call to __do_uninit_copy instead of
__do_uninit_fill.
* testsuite/20_util/specialized_algorithms/uninitialized_fill/120931.cc:
New test.
std::__niter_base(__last),
__x);
else
- std::__do_uninit_copy(__first, __last, __x);
+ std::__do_uninit_fill(__first, __last, __x);
}
// Overload for pointers.
--- /dev/null
+// { dg-options "-std=gnu++98" }
+// { dg-do compile { target c++98_only } }
+// std::deque<character types>::resize() method fails with -std=c++98
+
+#include <memory>
+#include <testsuite_iterators.h>
+
+void
+test_pr120931()
+{
+ using __gnu_test::test_container;
+ using __gnu_test::forward_iterator_wrapper;
+ unsigned char c[1];
+ test_container<unsigned char, forward_iterator_wrapper> f(c);
+ std::uninitialized_fill(f.begin(), f.end(), 0);
+}