diff options
author | Marshall Clow <mclow.lists@gmail.com> | 2015-04-16 21:36:54 +0000 |
---|---|---|
committer | Marshall Clow <mclow.lists@gmail.com> | 2015-04-16 21:36:54 +0000 |
commit | 60d5e0e027da4bf5187b0221e8a06f5a8d072d8b (patch) | |
tree | 93574d60a447b5dfcd0d58548afa0deb0885bb34 /libcxx/test/std/iterators/stream.iterators/istream.iterator | |
parent | 19d704d13ce1d024de9c23336f331f9919af801c (diff) | |
download | bcm5719-llvm-60d5e0e027da4bf5187b0221e8a06f5a8d072d8b.tar.gz bcm5719-llvm-60d5e0e027da4bf5187b0221e8a06f5a8d072d8b.zip |
A few bits of N2994 didn't get fully implemented a long time ago. Thanks to STL@microsoft.com for the bug report
llvm-svn: 235134
Diffstat (limited to 'libcxx/test/std/iterators/stream.iterators/istream.iterator')
3 files changed, 54 insertions, 3 deletions
diff --git a/libcxx/test/std/iterators/stream.iterators/istream.iterator/istream.iterator.cons/default.fail.cpp b/libcxx/test/std/iterators/stream.iterators/istream.iterator/istream.iterator.cons/default.fail.cpp new file mode 100644 index 00000000000..5e6cc545599 --- /dev/null +++ b/libcxx/test/std/iterators/stream.iterators/istream.iterator/istream.iterator.cons/default.fail.cpp @@ -0,0 +1,30 @@ +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// <iterator> + +// class istream_iterator + +// constexpr istream_iterator(); + +#include <iterator> +#include <cassert> + +struct S { S(); }; // not constexpr + +int main() +{ +#if __cplusplus >= 201103L + { + constexpr std::istream_iterator<S> it; + } +#else +#error "C++11 only test" +#endif +} diff --git a/libcxx/test/std/iterators/stream.iterators/istream.iterator/istream.iterator.cons/default.pass.cpp b/libcxx/test/std/iterators/stream.iterators/istream.iterator/istream.iterator.cons/default.pass.cpp index f6c3dba7ae6..bea07ec2272 100644 --- a/libcxx/test/std/iterators/stream.iterators/istream.iterator/istream.iterator.cons/default.pass.cpp +++ b/libcxx/test/std/iterators/stream.iterators/istream.iterator/istream.iterator.cons/default.pass.cpp @@ -11,13 +11,20 @@ // class istream_iterator -// istream_iterator(); +// constexpr istream_iterator(); #include <iterator> #include <cassert> int main() { - std::istream_iterator<int> i; - assert(i == std::istream_iterator<int>()); + { + typedef std::istream_iterator<int> T; + T it; + assert(it == T()); +#if __cplusplus >= 201103L + constexpr T it2; +#endif + } + } diff --git a/libcxx/test/std/iterators/stream.iterators/istream.iterator/types.pass.cpp b/libcxx/test/std/iterators/stream.iterators/istream.iterator/types.pass.cpp index be55c97773d..85a70a01797 100644 --- a/libcxx/test/std/iterators/stream.iterators/istream.iterator/types.pass.cpp +++ b/libcxx/test/std/iterators/stream.iterators/istream.iterator/types.pass.cpp @@ -19,9 +19,14 @@ // typedef traits traits_type; // typedef basic_istream<charT,traits> istream_type; // ... +// +// If T is a literal type, then the default constructor shall be a constexpr constructor. +// If T is a literal type, then this constructor shall be a trivial copy constructor. +// If T is a literal type, then this destructor shall be a trivial destructor. #include <iterator> #include <type_traits> +#include <string> int main() { @@ -32,6 +37,9 @@ int main() static_assert((std::is_same<I1::char_type, char>::value), ""); static_assert((std::is_same<I1::traits_type, std::char_traits<char> >::value), ""); static_assert((std::is_same<I1::istream_type, std::istream>::value), ""); + static_assert( std::is_trivially_copy_constructible<I1>::value, ""); + static_assert( std::is_trivially_destructible<I1>::value, ""); + typedef std::istream_iterator<unsigned, wchar_t> I2; static_assert((std::is_convertible<I2, std::iterator<std::input_iterator_tag, unsigned, std::ptrdiff_t, @@ -39,4 +47,10 @@ int main() static_assert((std::is_same<I2::char_type, wchar_t>::value), ""); static_assert((std::is_same<I2::traits_type, std::char_traits<wchar_t> >::value), ""); static_assert((std::is_same<I2::istream_type, std::wistream>::value), ""); + static_assert( std::is_trivially_copy_constructible<I2>::value, ""); + static_assert( std::is_trivially_destructible<I2>::value, ""); + + typedef std::istream_iterator<std::string> I3; + static_assert(!std::is_trivially_copy_constructible<I3>::value, ""); + static_assert(!std::is_trivially_destructible<I3>::value, ""); } |