А кто сказал, что будет иметь место какое-то аккуратное предсказуемое уничтожение?
Ну в вашем коде тоже UB, и в этом случае естественног ничего не гарантируется. Но мне показалось, что вы утверждаете, что любой код, выводящий строку без перевода, не обязан её выводить.
Нет, я такого не говорил. Я говорю лишь о том, что стандарт языка снимает с себя с ответственность за этот вопрос
http://port70.net/~nsz/c/c11/n1570.html#7.21.2p2Цитата:
2 A text stream is an ordered sequence of characters composed into lines, each line consisting of zero or more characters plus a terminating new-line character. Whether the last line requires a terminating new-line character is implementation-defined [...].
И, так как в исходном вопросе не указана конкретная реализация, я, естественно, как и все присутствующие, испытал непреодолимое желание рассмотреть код с точки зрения голого стандарта языка.
Например
#include <iostream> int main() { std::cout << "foobar"; return 0;}
- гарантируется ли по вашему мнению что строка выведется, или нет?
Нет, не гарантируется. Опять же, потому что вы задали вопрос про абстрактную С++ программу, без указания конкретной реализации. Это, однако, никак не мешает конкретным реализациям
гарантировать вывод в таких случаях.
Можете процитировать? Я вижу что exit должно вызвать flush для всех буферизованных потоков (ну и при выходе из main зовется exit). Ничего релевантного про символ перевода строки (кроме существования line-buffered потоков) я не вижу.
В данном случае речь идет о самом определении "текстового потока": что является валидным текстовым потоком, а что нет.
Из этого ничего не следует, что делает терминал (или как работает перенаправленный еще куда-то вывод) - это его личное дело, к стандарту и поведению программы отношения не имеющее.
Во-первых, возможно именно это и хочет сказать стандарт в приведенной выше цитате.
Во-вторых, на практике именно эта буферизация как раз таки прекрасно управляется
из программы через
setvbuf.