This is the mail archive of the
gcc-prs@gcc.gnu.org
mailing list for the GCC project.
Re: libstdc++/1732
- To: gdr at gcc dot gnu dot org
- Subject: Re: libstdc++/1732
- From: Peter Schmid <schmid at snake dot iap dot physik dot tu-darmstadt dot de>
- Date: 23 Jan 2001 19:06:00 -0000
- Cc: gcc-prs at gcc dot gnu dot org,
- Reply-To: Peter Schmid <schmid at snake dot iap dot physik dot tu-darmstadt dot de>
The following reply was made to PR libstdc++/1732; it has been noted by GNATS.
From: Peter Schmid <schmid@snake.iap.physik.tu-darmstadt.de>
To: gcc-gnats@gcc.gnu.org
Cc:
Subject: Re: libstdc++/1732
Date: Tue, 23 Jan 2001 20:01:38 +0100 (CET)
I am not sure if the parentheses are extraneous. For if I add an
output routine via the copy function and an ostream_iterator, the code
does not compile, which is really strange. The compiler message claims
that the class menge does not contain an iterator begin or end of the
correct type.
Surprisingly, if I initialise the container with the help of the copy
function and an inserter (change the #if 1 to #if 0) the code compiles
and works as expected. Could you please elaborate why this code does
not compile for #if 1. Are there problems with iterators?
Thanks for your reply.
Peter Schmid
tv.C
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
#if 1
vector<int> menge(istream_iterator<int>(cin),
istream_iterator<int>());
#else
vector<int> menge;
copy (istream_iterator<int>(cin),
istream_iterator<int>(),
inserter(menge,menge.end()));
#endif
copy (menge.begin(), menge.end(),
ostream_iterator<int>(cout, "\n"));
}
#if 1
g++ -o tv tv.C -W -Wall
tv.C: In function `int main()':
tv.C:19: request for member `begin' in `menge', which is of non-aggregate type
`std::vector<int, std::allocator<int> > ()(std::istream_iterator<int,
ptrdiff_t>, std::istream_iterator<int, ptrdiff_t> (*)())'
tv.C:19: request for member `end' in `menge', which is of non-aggregate type
`std::vector<int, std::allocator<int> > ()(std::istream_iterator<int,
ptrdiff_t>, std::istream_iterator<int, ptrdiff_t> (*)())'
#if 0
g++ -o tv tv.C -W -Wall
peter@kiste:~ > ./tv
1 2 3
1
2
3