D
Daniel T.
In my compiler, the following works and does as expected:
#include <iterator>
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
using namespace std;
istream_iterator<char> inBegin(cin);
istream_iterator<char> inEnd;
vector<char> vec( inBegin, inEnd );
copy( vec.begin(), vec.end(), ostream_iterator<char>(cout, ", ") );
cout << '\n';
}
Whereas the following doesn't compile:
#include <iterator>
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
using namespace std;
vector<char> vec( istream_iterator<char>(cin),
istream_iterator<char>() );
copy( vec.begin(), vec.end(), ostream_iterator<char>(cout, ", ") );
cout << '\n';
}
main.cpp:11: error: request for member `begin' in
`vec(std::istream_iterator<char, char, std::char_traits<char>,
ptrdiff_t>, std::istream_iterator<char, char, std::char_traits<char>,
ptrdiff_t> (*)())', which is of non-aggregate type `std::vector<char,
std::allocator<char> > ()(std::istream_iterator<char, char,
std::char_traits<char>, ptrdiff_t>, std::istream_iterator<char, char,
std::char_traits<char>, ptrdiff_t> (*)())'
Is this a bug in the compiler, or something else?
#include <iterator>
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
using namespace std;
istream_iterator<char> inBegin(cin);
istream_iterator<char> inEnd;
vector<char> vec( inBegin, inEnd );
copy( vec.begin(), vec.end(), ostream_iterator<char>(cout, ", ") );
cout << '\n';
}
Whereas the following doesn't compile:
#include <iterator>
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
using namespace std;
vector<char> vec( istream_iterator<char>(cin),
istream_iterator<char>() );
copy( vec.begin(), vec.end(), ostream_iterator<char>(cout, ", ") );
cout << '\n';
}
main.cpp:11: error: request for member `begin' in
`vec(std::istream_iterator<char, char, std::char_traits<char>,
ptrdiff_t>, std::istream_iterator<char, char, std::char_traits<char>,
ptrdiff_t> (*)())', which is of non-aggregate type `std::vector<char,
std::allocator<char> > ()(std::istream_iterator<char, char,
std::char_traits<char>, ptrdiff_t>, std::istream_iterator<char, char,
std::char_traits<char>, ptrdiff_t> (*)())'
Is this a bug in the compiler, or something else?