Section: 29.7 [numarray] Status: C++14 Submitter: Gabriel Dos Reis Opened: 2011-05-17 Last modified: 2016-02-10
Priority: Not Prioritized
View all other issues in [numarray].
View all issues with C++14 status.
It was just brought to my attention that the pair of functions begin/end were added to valarray component. Those additions strike me as counter to the long standing agreement that valarray<T> is not yet another container. Valarray values are in general supposed to be treated as a whole, and as such has a loose specification allowing expression template techniques.The addition of these functions sound to me as making it much harder (or close to impossible) to effectively use expression templates as implementation techniques, for no clear benefits. My recommendation would be to drop begin/end - or at least for the const valarray<T>& version. I strongly believe those are defects.
[This issue was discussed on the library reflector starting from c++std-lib-30761. Some of the key conclusions of this discussion were:]
[ 2011 Bloomington ]
The intent of these overloads is entirely to support the new for syntax, and not to create new containers.
Stefanus provides suggested wording.
Moved to Tenatively Ready by post-meeting issues processing group, after confirmation from Gaby.
[2012, Portland: applied to WP]
In 29.7.1 [valarray.syn]/4, make the following :
4 Implementations introducing such replacement types shall provide additional functions and operators as follows:
In 29.7.10 [valarray.range], make the following :
1 In the begin and end function templates that follow, unspecified1 is a type that meets the requirements of a mutable random access iterator (24.2.7) whose value_type is the template parameter T and whose reference type is T&. unspecified2 is a type that meets the requirements of a constant random access iterator (24.2.7) whose value_type is the template parameter T and whose reference type is const T&.