ошибка: невозможно связать значение 'std :: basic_ostream' со значением 'std :: basic_ostream &&' sl << ss; - PullRequest
1 голос
/ 12 апреля 2020

Мой друг прислал мне код, где он говорит, что он успешно скомпилирован в Windows. Я попробовал на linux, и это не удалось, выдав ошибку ниже. Ниже приведен минимальный проверяемый пример кода.

#include <iostream>
#include <sstream>
using namespace std;

int main()
{
   std::stringstream ss, sl;
   sl << ss;
}

, но он дает

error: cannot bind ‘std::basic_ostream’ lvalue to ‘std::basic_ostream&&’
    sl << ss;

Почему он работает в windows, но не в linux, и почему происходит эта ошибка

1 Ответ

3 голосов
/ 12 апреля 2020

Начиная с C ++ 11, этот код не может быть скомпилирован, потому что нет соответствующей перегрузки для operator<< с обоими операндами типа std::stringstream.

Однако до C ++ 11 std::ostream при условии неявного преобразования в void *, поэтому может быть вызвана следующая перегрузка:

basic_ostream& operator<<( const void* value );

Вывод будет аналогичен выводу нулевого указателя, если в потоке есть ошибка, в противном случае некоторое неуказанное ненулевое значение указателя.

Возможно, ваш друг использовал старый компилятор или компилятор, работающий в старом режиме совместимости.

...