では、こんな感じ、ということですね。

bool storage::contains( T const* p ) const
{
#if defined( USING_RELATIONAL_OPERATORS_OF_POINTERS )
  return ( p != 0 ) && ( &a[0] <= p ) && ( p < &a[N] );
#else
  if( p != 0 )
    for( T const* q = &a[0] ; q != &a[N] ; ++q )
      if( p == q )
        return true;
  return false;
#endif
}

あと、5.9 -2- を読む限り、同じ配列内の要素ならちゃんと定義されてるっぽいですよ。