Title
valarray slice default constructor
Status
cd1
Section
[class.slice]
Submitter
Howard Hinnant

Created on 2005-11-03.00:00:00 last changed 172 months ago

Messages

Date: 2010-10-21.18:28:33

[ Martin suggests removing the second sentence in [cons.slice] as well. ]

Change [cons.slice]:

1 - The default constructor for slice creates a slice which specifies no elements. The default constructor is equivalent to slice(0, 0, 0). A default constructor is provided only to permit the declaration of arrays of slices. The constructor with arguments for a slice takes a start, length, and stride parameter.

Change [gslice.cons]:

1 - The default constructor creates a gslice which specifies no elements. The default constructor is equivalent to gslice(0, valarray<size_t>(), valarray<size_t>()). The constructor with arguments builds a gslice based on a specification of start, lengths, and strides, as explained in the previous section.

Date: 2005-11-03.00:00:00

If one explicitly constructs a slice or glice with the default constructor, does the standard require this slice to have any usable state? It says "creates a slice which specifies no elements", which could be interpreted two ways:

  1. There are no elements to which the slice refers (i.e. undefined).
  2. The slice specifies an array with no elements in it (i.e. defined).

Here is a bit of code to illustrate:

#include <iostream>
#include <valarray>

int main()
{
    std::valarray<int> v(10);
    std::valarray<int> v2 = v[std::slice()];
    std::cout << "v[slice()].size() = " << v2.size() << '\n';
}

Is the behavior undefined? Or should the output be:

v[slice()].size() = 0

There is a similar question and wording for gslice at 26.3.6.1p1.

History
Date User Action Args
2010-10-21 18:28:33adminsetmessages: + msg3007
2005-11-03 00:00:00admincreate