The specific error message you are showing should be part of the error released by g ++. The full error should look something closer to the following (I shortened the paths, and this conclusion is from 4.1.2):
basic_string.tcc: In static member function 'static _CharT* std::basic_string<_CharT, _Traits, _Alloc>::_S_construct(_InIterator, _InIterator, const _Alloc&, std::input_iterator_tag) [with _InIterator = std::istream_iterator<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, char, std::char_traits<char>, int>, _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]': basic_string.h:1449: instantiated from 'static _CharT* std::basic_string<_CharT, _Traits, _Alloc>::_S_construct_aux(_InIterator, _InIterator, const _Alloc&, __false_type) [with _InIterator = std::istream_iterator<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, char, std::char_traits<char>, int>, _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]' basic_string.h:1464: instantiated from 'static _CharT* std::basic_string<_CharT, _Traits, _Alloc>::_S_construct(_InIterator, _InIterator, const _Alloc&) [with _InIterator = std::istream_iterator<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, char, std::char_traits<char>, int>, _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]' basic_string.tcc:241: instantiated from 'std::basic_string<_CharT, _Traits, _Alloc>::basic_string(_InputIterator, _InputIterator, const _Alloc&) [with _InputIterator = std::istream_iterator<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, char, std::char_traits<char>, int>, _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]' t.cpp:16: instantiated from here Line 101: error: cannot convert 'const std::basic_string<char, std::char_traits<char>, std::allocator<char> >' to 'char' in assignment compilation terminated due to -Wfatal-errors.
It's not very friendly, is it? :-) The useful lines in the error are the lines at the end, not the lines at the beginning. The error message is issued in the reverse order: the first error is the actual error, then the following lines give you crackers through a source showing how the compiler got there. The last line shows where your source had an error:
t.cpp:16: instantiated from here Line 101: error: cannot convert ' const std::basic_string<char, std::char_traits<char>, std::allocator<char> >' to 'char' in assignment
In my t.cpp:16 example file, there is the following line:
string s(begin,end);
If you comment out this line (and the next line using s ), you will find that your source compiles without errors.
At this point, it should be clear enough that you are using the std::string constructor incorrectly, which means that you are passing the wrong argument types to it. You give it something that has std::string (which is what std::basic_string<char> ) and expects something that has char .
If you consult the documentation for std::string , you will find that it has a constructor that looks like this:
template <typename InputIterator> string(InputIterator first, InputIterator last);
These input iterators allow you to create a string from a range of characters. You, however, pass the constructor the std::string construct. If you change your istream_iterator<string> to istream_iterator<char> , that should fix the error.