    *   `segment_offsets` (of length `num_segments + 1`) can be aliased
    *   for both the `d_begin_offsets` and `d_end_offsets` parameters (where
    *   the latter is specified as `segment_offsets + 1`).
+   * - Let `s` be in `[0, num_segments)`. The range 
+   *   `[d_out + d_begin_offsets[s], d_out + d_end_offsets[s])` shall not 
+   *   overlap `[d_in + d_begin_offsets[s], d_in + d_end_offsets[s])`,
+   *   `[d_begin_offsets, d_begin_offsets + num_segments)` nor
+   *   `[d_end_offsets, d_end_offsets + num_segments)`.
    * - @devicestorage
    *
    * @par Snippet

   *   for both the `d_begin_offsets` and `d_end_offsets` parameters (where
   *   the latter is specified as `segment_offsets + 1`).
   * - Does not support `+` operators that are non-commutative.
   * - @devicestorage
   *
   * @par Snippet


    ArgIndexInputIteratorT d_indexed_in(d_in);

    // Initial value, replace with std::numeric_limits<T>::lowest() when C++11 
    // support is more prevalent
    OutputTupleT initial_value(1, Traits<InputValueT>::Lowest());

    return DispatchSegmentedReduce<ArgIndexInputIteratorT,
                                   OutputIteratorT,
