Hi,
Sorry trivial
questions I'm sure.
Why doesn't the
lexical_cast work below?
I think
it meets the concept description.
Source
is OutputStreamable, meaning that an
operator<<
is defined that takes a
std::ostream
or std::wostream
object on the left
hand side and an instance of the argument type on the right.
Target
is InputStreamable, meaning that an
operator>>
is defined that takes a
std::istream
or std::wistream
object on the left
hand side and an instance of the result type on the right.
Target
is CopyConstructible [20.1.3].
Target
is DefaultConstructible, meaning that it is
possible to default-initialize an object of that type [8.5, 20.1.4].
>>>>>
play.cpp >>>>
#include
<vector>
#include <iostream>
#include
<algorithm>
#include
<boost/bind.hpp>
#include <boost/lexical_cast.hpp>
#include
<boost/filesystem.hpp>
#include <sstream>
using namespace
std;
using namespace boost;
using namespace
boost::filesystem;
template<class
T>
ostream&
operator<< (ostream& os, const
vector<T>& v)
{
copy(v.begin(), v.end(),
ostream_iterator<T>(os, ";"));
return
os;
}
template<class
T>
string
v2s(const vector<T>& v)
{
stringstream
ss;
copy(v.begin(), v.end(), ostream_iterator<T>(ss,
";"));
return ss.str();
}
int
main(int
argc,
char* argv[])
{
vector<string> v;
v.push_back("hello");
v.push_back("world");
cout << v <<
endl;
cout << v2s(v) << endl;
cout << lexical_cast<string>(v) << endl; // XXX
doesn't compile...XXX
return 0;
}
Any help greatly
appreciated.
Andy