From df85e57f4a33ccaa56e044bac98e2752ace52303 Mon Sep 17 00:00:00 2001 From: Howard Hinnant Date: Sun, 27 Feb 2011 18:02:02 +0000 Subject: [PATCH] Fixed two problems found by Chris Jefferson: Made operator>> for char consistent with gcc. Opened an LWG issue on this one. 2) Renamed some private typedefs which are causing boost grief. git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@126576 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/__hash_table | 4 ++-- include/istream | 8 ++++++++ include/map | 12 ++++++------ 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/include/__hash_table b/include/__hash_table index 4be27f64..41dbaa01 100644 --- a/include/__hash_table +++ b/include/__hash_table @@ -29,9 +29,9 @@ template struct __hash_node_base { typedef __hash_node_base __first_node; - typedef _NodePtr pointer; + // typedef _NodePtr pointer; - pointer __next_; + _NodePtr __next_; _LIBCPP_INLINE_VISIBILITY __hash_node_base() : __next_(nullptr) {} }; diff --git a/include/istream b/include/istream index 90bf4b66..b427605d 100644 --- a/include/istream +++ b/include/istream @@ -801,6 +801,13 @@ operator>>(basic_istream<_CharT, _Traits>& __is, _CharT& __c) typename basic_istream<_CharT, _Traits>::sentry __sen(__is); if (__sen) { +#if 1 + typename _Traits::int_type __i = __is.rdbuf()->sbumpc(); + if (_Traits::eq_int_type(__i, _Traits::eof())) + __is.setstate(ios_base::eofbit | ios_base::failbit); + else + __c = _Traits::to_char_type(__i); +#else typedef istreambuf_iterator<_CharT, _Traits> _I; _I __i(__is); _I __eof; @@ -812,6 +819,7 @@ operator>>(basic_istream<_CharT, _Traits>& __is, _CharT& __c) } else __is.setstate(ios_base::eofbit | ios_base::failbit); +#endif } #ifndef _LIBCPP_NO_EXCEPTIONS } diff --git a/include/map b/include/map index 85e10f61..fdd13384 100644 --- a/include/map +++ b/include/map @@ -493,11 +493,11 @@ class _LIBCPP_VISIBLE __map_iterator _TreeIterator __i_; typedef typename _TreeIterator::__pointer_traits __pointer_traits; - typedef const typename _TreeIterator::value_type::first_type key_type; - typedef typename _TreeIterator::value_type::second_type mapped_type; + typedef const typename _TreeIterator::value_type::first_type __key_type; + typedef typename _TreeIterator::value_type::second_type __mapped_type; public: typedef bidirectional_iterator_tag iterator_category; - typedef pair value_type; + typedef pair<__key_type, __mapped_type> value_type; typedef typename _TreeIterator::difference_type difference_type; typedef value_type& reference; typedef typename __pointer_traits::template @@ -558,11 +558,11 @@ class _LIBCPP_VISIBLE __map_const_iterator _TreeIterator __i_; typedef typename _TreeIterator::__pointer_traits __pointer_traits; - typedef const typename _TreeIterator::value_type::first_type key_type; - typedef typename _TreeIterator::value_type::second_type mapped_type; + typedef const typename _TreeIterator::value_type::first_type __key_type; + typedef typename _TreeIterator::value_type::second_type __mapped_type; public: typedef bidirectional_iterator_tag iterator_category; - typedef pair value_type; + typedef pair<__key_type, __mapped_type> value_type; typedef typename _TreeIterator::difference_type difference_type; typedef const value_type& reference; typedef typename __pointer_traits::template