" "
является строковым литералом длины один и поэтому имеет тип const char[2]
.std::string
не связано.
Теоретически , вы можете перегрузить его следующим образом:
auto& operator<<(std::ostream& os, const char (&s)[2]) {
return os << (*s == ' ' && !s[1] ? +"\n" : +s);
}
Хотя это превосходит все другие перегрузки, теперь все становится по-настоящему волосатым,Проблема в том, что some_ostream << " "
, вероятно, не редкость, даже в шаблонах, и теперь больше не разрешает вызов стандартной функции .Эти шаблоны теперь имеют другое определение в затронутых единицах перевода, чем в незатронутых, что нарушает правило одного определения.
То, что вы должны сделать, - это не пытаться применить глобальное решение кочень локальная проблема:
Желательно, изменить ваш код, в настоящее время потоковый символ пробела.
В качестве альтернативы, написать свой собственный буфер потока, который переводит его, как вы хотите, в новую строку.