diff options
Diffstat (limited to 'test/std/iterators/stream.iterators/istream.iterator/types.pass.cpp')
-rw-r--r-- | test/std/iterators/stream.iterators/istream.iterator/types.pass.cpp | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/test/std/iterators/stream.iterators/istream.iterator/types.pass.cpp b/test/std/iterators/stream.iterators/istream.iterator/types.pass.cpp new file mode 100644 index 000000000000..85a70a017976 --- /dev/null +++ b/test/std/iterators/stream.iterators/istream.iterator/types.pass.cpp @@ -0,0 +1,56 @@ +//===----------------------------------------------------------------------===// +// +// 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> + +// template <class T, class charT = char, class traits = char_traits<charT>, +// class Distance = ptrdiff_t> +// class istream_iterator +// : public iterator<input_iterator_tag, T, Distance, const T*, const T&> +// { +// public: +// typedef charT char_type; +// 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() +{ + typedef std::istream_iterator<double> I1; + static_assert((std::is_convertible<I1, + std::iterator<std::input_iterator_tag, double, std::ptrdiff_t, + const double*, const double&> >::value), ""); + 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, + const unsigned*, const unsigned&> >::value), ""); + 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, ""); +} |