[Bug libstdc++/53080] New: std::array - std::get() and std::tuple_element is nothing bounds check
faithandbrave at gmail dot com
gcc-bugzilla@gcc.gnu.org
Mon Apr 23 02:15:00 GMT 2012
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53080
Bug #: 53080
Summary: std::array - std::get() and std::tuple_element is
nothing bounds check
Classification: Unclassified
Product: gcc
Version: 4.7.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libstdc++
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: faithandbrave@gmail.com
"23.3.2.9 Tuple interface to class template array" in N3337(C++ Specification
Draft)
tuple_element<I, array<T, N> >::type
Requires: I < N. The program is ill-formed if I is out of bounds.
template <size_t I, class T, size_t N> T& get(array<T, N>& a) noexcept;
Requires: I < N. The program is ill-formed if I is out of bounds.
GCC 4.7.0 libstdc++ <array> header is no check bounds.
I think need static_assert to tuple_element and get().
Issue code is follow:
template<std::size_t _Int, typename _Tp, std::size_t _Nm>
struct tuple_element<_Int, array<_Tp, _Nm> >
{ typedef _Tp type; };
template<std::size_t _Int, typename _Tp, std::size_t _Nm>
constexpr _Tp&
get(array<_Tp, _Nm>& __arr) noexcept
{ return __arr._M_instance[_Int]; }
template<std::size_t _Int, typename _Tp, std::size_t _Nm>
constexpr _Tp&&
get(array<_Tp, _Nm>&& __arr) noexcept
{ return std::move(get<_Int>(__arr)); }
template<std::size_t _Int, typename _Tp, std::size_t _Nm>
constexpr const _Tp&
get(const array<_Tp, _Nm>& __arr) noexcept
{ return __arr._M_instance[_Int]; }
More information about the Gcc-bugs
mailing list