this post was submitted on 17 Mar 2024
14 points (93.8% liked)

C++

1778 readers
1 users here now

The center for all discussion and news regarding C++.

Rules

founded 1 year ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 3 points 8 months ago* (last edited 8 months ago) (1 children)

If you look at it... The answer is actually to invoke the copy constructor. They're just complaining that, that can be unwieldy, then going on to say ... "actually if you're using C++17 this is all really easy just say auto(x) instead of writing your own copy constructor!"

It's a lot of words (IMO) without that much substance.

The macro would be unnecessary complexity vs their pre-C++17 compatible copy function FWIW.

The other alternative here which is why I think this is kind of ridiculous is 9/10 you can just change the function you're calling to pass a copy rather than passing a reference if that's what you really want.

[–] [email protected] 1 points 8 months ago

The other alternative here which is why I think this is kind of ridiculous is 9/10 you can just change the function you’re calling to pass a copy rather than passing a reference if that’s what you really want.

...That's a pretty good point. Use the type system to work for you. If you want a value thing, just get it by-value. No need for macros, no need for wildcard ampersands, no need for constexpr constinit consteval static inline noexcept(noexcept(...)) requires(requires(...)) explicit(explicit(...)) { body } -> decltype(body).