On 13 September 2018 at 19:36, Jason Merrill <ja...@redhat.com> wrote:
> On Thu, Sep 13, 2018 at 9:41 AM, Ville Voutilainen
> <ville.voutilai...@gmail.com> wrote:
>> On 13 September 2018 at 13:41, Ville Voutilainen
>> <ville.voutilai...@gmail.com> wrote:
>>>> How does this work when:
>>>>   unsigned has_complex_copy_ctor : 1;
>>> It doesn't. I need more bits. Luckily, we have some available.
>>
>> Here. I suppose this could theoretically be done in some later stage
>> of class completion,
>> but that would presumably be an additional member function loop that
>> looks at the constructors,
>> weeds out copy constructors, and calculates the triviality bit (and it
>> should probably then also
>> look at fields and bases, again). So while I continue to have a minor
>> distaste for this whole approach,
>> and how it wastes two perfectly good bits for a dark corner case, I
>> think I can learn to live with it.
>
> Really, the problem is that trivial_fn_p shouldn't use
> type_has_trivial_fn, and also that the function named
> "type_has_trivial_fn" actually returns "type has no non-trivial fn".
> These flags are relics of C++98 semantics.  Your test should also
> check that !__is_trivially_constructible(M,M&) and
> !__is_trivially_constructible(M2,M2&).

Yeah, this patch doesn't handle those trivialities correctly, that
needs further work.

> I suppose that given the limited number of possibly trivial
> signatures, we can still use flag bits on the class, as your patch is
> heading toward: one bit for each of the possibly trivial signatures,
> and TYPE_HAS_COMPLEX_COPY_CTOR; then TYPE_HAS_COPY_CTOR is the union
> of these.  And similarly for the other possibly trivial functions.

Okay. Do you think we should have an sfk_kind for non-canonical
copy/move operations?
That would presumably make it a tad more straightforward to go from
fndecl to whatever class bits,
instead of what's currently there, where we say "yeah I had a fndecl,
now I turned it into an sfk_kind
that says it's a copy constructor, but guess which one when you're
deeming its triviality". ;)

Reply via email to