В следующем коде:
#include <iostream>
auto& print = std::cout; // Type deduction for std::cout works
auto& end = std::endl; // But the std::endl is exception here
int main(void) {
print << "Hello" << end;
return 0;
}
Вывод типа для std::cout
происходит правильно, но почему он не работает для std::endl
?
Примечание. Удаление ссылки на оператор (амперсанд) также не работает.
Код VS гласит:
И компилятор генерирует следующее:
$ g++ -Wall -O3 -std=c++14 -o main main.cpp; ./main
main.cpp:4:18: error: unable to deduce 'auto&' from 'std::endl'
4 | auto& end = std::endl; // But the std::endl is exception here
| ^~~~
main.cpp:4:18: note: couldn't deduce template parameter 'auto'
std::cout
, но не сstd::cin
. Искал об этом, но, похоже, я не нашел что-то актуальное по этой проблеме. - person Rohan Bari   schedule 09.08.2020auto& print = std::cout;
, но также говорит Посколькуstd::endl
является шаблонной функцией, а не тип, его нельзя вывести, используя ссылку наauto
тип. - person Remy Lebeau   schedule 09.08.2020std::endl
в тот раз не сработали. Я понятия не имел об этом. - person Rohan Bari   schedule 09.08.2020std::endl
.auto end = '\n'
будет работать так же хорошо (и вы можете просто написать"Hello\n"
). - person Artyer   schedule 09.08.2020