N1624=04-0064
                                                             Matt Austern
                                                             24 Mar 2004

Resolutions to fixed-size array issues

Resolution to issue 8.2:

Add a clause to section 6.2.2 [tr.array.array]: "The effect of calling
front() or back() for a zero-sized array is implementation defined."

Resolution to issue 8.4:

6.1.1 Header <tuple> synopsis

Add:

template <class T, size_t N > struct array;

template <class T, size_t N>        struct tuple_size<array<T, N> >;
template <int I, class T, size_t N> struct tuple_element<I, array<T, N> >;

template <int I, class T, size_t N>       T& get(      array<T, N>&); 
template <int I, class T, size_t N> const T& get(const array<T, N>&); 


6.1.4

Add a new section 6.1.4

tuple_size<array<T, N> >::value

Type:  integral constant expression.
Value:  N

tuple_element<I, array<T, N> >::type

Requires:  0 <= I < N.   The program is ill-formed if I is out of bounds.
Value:  The type T.

template <int I, class T, size_t N> T& get(array<T, N>& a); 

Requires: 0 <= I < N. The program is ill-formed if I is out of bounds.
Return type:  T&.
Returns: A reference to the Ith element of a, where indexing is zero-based.

template <int I, class T, size_t N> const T& get(const array<T, N>& a); 

Requires: 0 <= I < N. The program is ill-formed if I is out of bounds.
Return type:  const T&.
Returns: A const reference to the Ith element of a, where indexing is zero-based.