diff options
Diffstat (limited to 'libstdc++-v3/include/tr1_impl/array')
-rw-r--r-- | libstdc++-v3/include/tr1_impl/array | 45 |
1 files changed, 25 insertions, 20 deletions
diff --git a/libstdc++-v3/include/tr1_impl/array b/libstdc++-v3/include/tr1_impl/array index 0fda088aa53..7a13ba8ff8d 100644 --- a/libstdc++-v3/include/tr1_impl/array +++ b/libstdc++-v3/include/tr1_impl/array @@ -36,7 +36,7 @@ namespace std { _GLIBCXX_BEGIN_NAMESPACE_TR1 - /// @brief struct array [6.2.2]. + /// @brief struct array. /// NB: Requires complete type _Tp. template<typename _Tp, std::size_t _Nm> struct array @@ -52,7 +52,7 @@ _GLIBCXX_BEGIN_NAMESPACE_TR1 typedef std::reverse_iterator<const_iterator> const_reverse_iterator; // Support for zero-sized arrays mandatory. - value_type _M_instance[_Nm ? _Nm : 1] __attribute__((__aligned__)); + value_type _M_instance[_Nm ? _Nm : 1]; // No explicit construct/copy/destroy for aggregate type. @@ -97,6 +97,24 @@ _GLIBCXX_BEGIN_NAMESPACE_TR1 rend() const { return const_reverse_iterator(begin()); } +#ifdef _GLIBCXX_INCLUDE_AS_CXX0X + const_iterator + cbegin() const + { return const_iterator(&_M_instance[0]); } + + const_iterator + cend() const + { return const_iterator(&_M_instance[_Nm]); } + + const_reverse_iterator + crbegin() const + { return const_reverse_iterator(end()); } + + const_reverse_iterator + crend() const + { return const_reverse_iterator(begin()); } +#endif + // Capacity. size_type size() const { return _Nm; } @@ -118,15 +136,17 @@ _GLIBCXX_BEGIN_NAMESPACE_TR1 reference at(size_type __n) - { - _M_check<_Nm>(__n); + { + if (__builtin_expect(__n >= _Nm, false)) + std::__throw_out_of_range(__N("array::at")); return _M_instance[__n]; } const_reference at(size_type __n) const { - _M_check<_Nm>(__n); + if (__builtin_expect(__n >= _Nm, false)) + std::__throw_out_of_range(__N("array::at")); return _M_instance[__n]; } @@ -153,21 +173,6 @@ _GLIBCXX_BEGIN_NAMESPACE_TR1 const _Tp* data() const { return &_M_instance[0]; } - - private: - template<std::size_t _Mm> - typename __gnu_cxx::__enable_if<_Mm, void>::__type - _M_check(size_type __n) const - { - if (__builtin_expect(__n >= _Mm, false)) - std::__throw_out_of_range(__N("array::_M_check")); - } - - // Avoid "unsigned comparison with zero" warnings. - template<std::size_t _Mm> - typename __gnu_cxx::__enable_if<!_Mm, void>::__type - _M_check(size_type) const - { std::__throw_out_of_range(__N("array::_M_check")); } }; // Array comparisons. |