Subject: Re: [SG10] A feature macro for mandatory copy elision
From: Ville Voutilainen (ville.voutilainen_at_[hidden])
Date: 2017-10-05 17:08:37
On 6 October 2017 at 01:04, Richard Smith <richard_at_[hidden]> wrote:
>> One of us is missing something. Why does that not work with
>> the non-guaranteed-copy-elision implementation?
> I can't write
> NoCopyNorMove x = factory();
> in C++14. It's ill-formed. Same goes for
> auto x = factory();
> The macro does not help you with that. It does not magically make a C++17
> feature appear in C++14 mode.
I can avoid compiling that when I know it won't work, for which I can
use the macro. I can compile that when I know
it'll work, for which the macro tells me that it'll work.
>> Furthermore, if I decide that I really
>> hate having to use those references, I will disable the whole type if
>> guaranteed copy elision is not available.
>> Do you anticipate actually wanting to do that? It seems like an odd choice
>> to permit the reference declaration only if guaranteed copy elision is
> The choice is that rather than performing tricks with having to
> befriend every possible factory function
> and forcing users to use lifetime-extending references, such RAII
> handles are provided only when copy
> elision is available, and otherwise completely different tools need to be
> I think we're still missing an example of that.
That would be wrapping the whole type in #ifdef
__cpp_mandatory_copy_elision, and providing
a different type that doesn't rely on copy elision, like a type that
is movable and has a different name.
SG10 list run by firstname.lastname@example.org