    *   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.
+   * - 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


    ArgIndexInputIteratorT d_indexed_in(d_in);

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

    return DispatchSegmentedReduce<ArgIndexInputIteratorT,
                                   OutputIteratorT,

   *   `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
