On Fri, May 12, 2023 at 11:23 PM Andrew Tomazos <andrewtomazos@gmail.com> wrote:
The community considers std::print a new and better replacement of std::cout, not an addition.

Uh, one person isn't "the community."
 
I suspect the difference between [Andrew's] proposed:
    std::println(1,2,3);
and the equivalent:
    std::cout << 1 << " " << 2 << " " << 3 << std::endl;
and their relationship to the Python:
    print(1,2,3)
is plain to see.

Right, one is equivalent to the Python and the other isn't.
If you really want to reserve the name std::print for something exactly equivalent to Python print, then you need to get on that ASAP and propose a different syntax for C++'s equivalent of Python's "{} {}" % (1, 2) operator.  Because as it stands right now, my impression is that C++23 is 99.9999% out the door already, with std::format remaining the C++ equivalent of Python's %, and std::print meaning "std::cout << std::format".

For example, you might propose that
    "string literal" % (args...)
should be the new shorthand for
    std::format("string literal", args...)
That would let you write
    puts("string literal" % (args...));
in place of today's
    puts(std::format("string literal", args...));
or C++23's
    std::println("string literal", args...);

But I don't think any such proposal has any real chance of success. It would mean undoing a lot of stuff that is already in C++23 (IIUC), and also inventing this new syntax (which as I've written it here, involves core-language changes that interact with the library, and that's a huge mess).

Anyway, the main takeaway here is that just having `std::print` change its behavior depending on the contents of its first string argument is an absolute 100% non-starter.

–Arthur