Вы не можете взять адрес большинства стандартных функций (см. могу-я-получить-адрес-функции, определенной-в-стандартной-библиотеке).
К счастью, io-manipulator является частью исключения (см. Addressable_functions) .
std::endl
— это шаблонная функция, поэтому вам нужно будет выбрать правильную перегрузку.
using print_manip_t = std::ostream& (*) (std::ostream&);
print(1, 2, 3, print_manip_t{std::endl});
print(1, 2, 3, static_cast<print_manip_t>(std::endl));
print(1, 2, 3, static_cast<std::ostream& (*) (std::ostream&)>(std::endl));
иначе вы должны указать, какой из них вы хотите
print(1, 2, 3, std::endl<char, std::char_traits<char>>);
или завернуть его
print(1, 2, 3, [](std::ostream& o) -> std::ostream&{ return o << std::endl; });
Демо
05.08.2021