Remix.run Logo
dig1 4 days ago

> You have to learn about what the insane move semantics are (and the syntax for move ctors/operators) to do fairly basic things with the language

That is simply not true. You can write a lot of C++ code without even touching move stuff. Hell, we've been fine without move semantics for the last 30 years :P

> Overloaded operators like operator*() and operator<<() are widely used in the standard library so you're forced to understand what craziness they're doing under the hood

Partially true. operator*() is used through the standard library a lot, because it nicely wraps pointer semantics. Still, you don't have to know about implementation details, as they depend on how the standard library implements the underlying containers.

AFAIK operator<<() is mainly (ab)used by streams. And you can freely skip that part; many C++ developers find them unnecessarily slow and complex.

> Basic standard library datatypes like std::vector use templates, so you're debugging template instantiation issues whether you write your own templated code or not.

As long as you keep things simple, errors are going to be simple. The problem with "modern C++" is that people overuse these new features without fully comprehending their pros and cons, simply because they look cool.

einpoklum 4 days ago | parent [-]

> operator<<() ... widely used in the standard library

Not that widely. You must be thinking of the IO streams part of the library. Yes, it's rather poor in many respects. But you don't have to use it! We have perfectly nice variadic printing functions these days!

    auto number = 42;
    std::println("Hello, {}! The answer is {}", "world", number);
loeg 3 days ago | parent [-]

std::println dates to C++23. This is very recent. You only have to be using Clang 18 (March 2024) or older to find the feature unsupported: https://godbolt.org/z/xPqYafhss (Clang 19 dates to September 2024, only a year ago.)

In contrast, the standard C++ stream types have used operator<< overloading for more than 25 years. glog/gtest assertions continue to use it.

einpoklum 3 days ago | parent [-]

I said "these days"... C++ is an evolving language. And while it doesn't throw things away, it does collect enough "stuff" that you can choose to write nicer and more straightforward code than before.