inline static void _S_do_it(_Tp* __restrict__ __b, _Tp* __restrict__ __e) { while (__b != __e) new(__b++) _Tp(); } is invalid, the __restrict__ keywords say that __b and __e point to different objects and you can't compare pointers to different objects.
-- Summary: valarray_array.h seems to overuse __restrict__ Product: gcc Version: 4.5.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libstdc++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: jakub at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41763