This is the mail archive of the
libstdc++@sourceware.cygnus.com
mailing list for the libstdc++ project.
Re: slices ; Stroustrup & libstdc++
- To: brent verner <brent at rcfile dot org>
- Subject: Re: slices ; Stroustrup & libstdc++
- From: <llewelly at dbritsch dot dsl dot xmission dot com>
- Date: Sat, 17 Jun 2000 04:46:47 -0600 (MDT)
- Cc: Gerhard Wesp <gwesp at cosy dot sbg dot ac dot at>,libstdc++ at sourceware dot cygnus dot com
On Sat, 17 Jun 2000 llewelly@dbritsch.dsl.xmission.com wrote:
> On Sat, 17 Jun 2000, brent verner wrote:
>
> > on Fri, Jun 16, 2000 at 12:59:00PM +0200, Gerhard Wesp typed aloud:
> > | hi all,
> > |
> > | i just tried a slice_array example from stroustrup, 3rd ed., p. 671
> > | which fails with the following error:
> > |
> > | grisu ~/c++% cat slice.cc
> > | #include <valarray>
> > |
> > | void f(std::valarray<double>& d)
> > | {
> > | std::slice_array<double>& v_even = d[std::slice(0,d.size()/2,2)];
A bit more info:
26.3.2.4 has:
slice_array<T> operator[](slice);
and since temporaries cannot be assigned to non-const references, this
code seems to be wrong.
> > | }
> >
> > I'm seeing the same error. I've spent the evening digging around
> > valarray & friends. I can't even decide if the code above _should_
> > work or not -- have you found out anything more? Would someone
> > enlighten us? I've compared the code to the standard, and everything
> > _looks_ OK (by the std).
> >
> > FWIW, the following code _does_ work.
> >
> > #include <valarray>
> > #include <iostream>
> >
> > void
> > f(std::valarray<double>& d)
> > {
> > std::slice oh(0,d.size()/2,2);
> > d[oh] = 100;
> > // d[oh] += d; // uncomment this to see its effect... i'm not
> > // sure it is correct. :\ .
> > }
> >
> > int
> > main()
> > {
> > std::valarray<double> a(10);
> > f(a);
> > for(unsigned i = 0; i < a.size(); ++i)
> > std::cout << "a[" << i << "] = " << a[i] << std::endl;
> > return 0;
> > }
> >
> > | grisu ~/c++% g++ -fhonor-std -c slice.cc
> > | slice.cc: In function `void f(std::valarray<double> &)':
> > | slice.cc:5: initialization of non-const reference type `class std::slice_array<double> &'
> > | slice.cc:5: from rvalue of type `std::slice_array<double>'
> > | grisu ~/c++% g++ -v
> > | Reading specs from /usr/local/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/specs
> > | gcc version 2.95.2 19991024 (release)
> > |
> > | is stroustrup wrong, or is libstdc++ (i'm using version
>
> It might be worthwhile to check the errata for 3rd edition, at
> www.research.att.com/~bs/3rd_errata.html ; there are several errors
> mentioned on pgs 670-671.
>
> unfortunately, I cannot find my copy of 3rd edition, and the errata are
> hard to read without one; I cannot tell what might be relevant.
>
> > | libstdc++.so.3.0.0) wrong, or am i missing something?
> > |
> > | greetings,
> > | -gerhard
> >
> >
>
>