diff --git a/libstdc++-v3/include/bits/stream_iterator.h b/libstdc++-v3/include/bits/stream_iterator.h index 298d4406afdd2f493352382bdb1fdbd4d0c9be87..9dc4a550be60aa2f3bb13c7e8d2234cbc347d24a 100644 --- a/libstdc++-v3/include/bits/stream_iterator.h +++ b/libstdc++-v3/include/bits/stream_iterator.h @@ -80,6 +80,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION : _M_stream(std::__addressof(__s)), _M_ok(true) { _M_read(); } + _GLIBCXX_CONSTEXPR istream_iterator(const istream_iterator& __obj) _GLIBCXX_NOEXCEPT_IF(is_nothrow_copy_constructible<_Tp>::value) : _M_stream(__obj._M_stream), _M_value(__obj._M_value), diff --git a/libstdc++-v3/testsuite/24_iterators/istream_iterator/cons/constexpr.cc b/libstdc++-v3/testsuite/24_iterators/istream_iterator/cons/constexpr.cc index 824cd93ecbe31d20c21b928c287a9c82095bcd84..95fda572d8e1321e1ed8cfa27dcea828cf27116e 100644 --- a/libstdc++-v3/testsuite/24_iterators/istream_iterator/cons/constexpr.cc +++ b/libstdc++-v3/testsuite/24_iterators/istream_iterator/cons/constexpr.cc @@ -24,5 +24,10 @@ int main() { __gnu_test::constexpr_default_constructible test; test.operator()<std::istream_iterator<char>>(); + + // LWG 3600. Making istream_iterator copy constructor trivial is an ABI break + __gnu_test::constexpr_single_value_constructible test2; + test2.operator()<std::istream_iterator<char>, std::istream_iterator<char>>(); + return 0; }