Implementing CWG1734-

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Implementing CWG1734-

suyash singh via cfe-dev

Hi all-

I’m attempting to implement CWG1734[0], which changes the definition of TriviallyCopyable[1].  My motivating examples that need to pass are[2]:

 

struct A{};

struct C : A {

const A a;

};

 

struct A{};

struct D : A {

const A a;

D& operator=(D&&) = default;

};

 

 

struct E {

  E &operator=(E&&)=delete;

};

 

static_assert(__is_trivially_copyable(C),"");

static_assert(__is_trivially_copyable(D),"");

static_assert(__is_trivially_copyable(E),"");

 

 

Currently the 1st and 2nd static asserts fail.  However, because of CWG1734 all 3 should pass (based on my reading).  ‘C’ has its move assignment deleted, as does D, with E explicitly deleted.

 

However, we don’t seem to have a good way of validating each of these.  I identified has(Non)TrivialMoveAssignment and data().DefaultedMoveAssignmentIsDeleted as the possible things, however there isn’t really a bit of logic that works for that. 


C:

hasTrivialMoveAssignment : false

hasNonTrivialMoveAssignment : true

data().DefaultedMoveAssignmentIsDeleted : true

 

D:

hasTrivialMoveAssignment : false

hasNonTrivialMoveAssignment : true

data().DefaultedMoveAssignmentIsDeleted : false

 

E:

hasTrivialMoveAssignment : true

hasNonTrivialMoveAssignment : false

data().DefaultedMoveAssignmentIsDeleted : false

 

 

There seems to be a piece of information that I don’t have yet, or a piece of logic that I need to figure out, but I’m not sure what it could be yet.  Can anyone give me a hint as to the logic?  Do we need to capture the =delete in a similar flag in the DefinitionData struct?  It seems that we need a hasDeleted(Copy/Move)(Constructor/Assignment) that includes the test for defaulted deleted AND trivially marked delete.

 

-Erich

 

[0] https://wg21.cmeerw.net/cwg/issue1734

[1] https://en.cppreference.com/w/cpp/named_req/TriviallyCopyable

[2] https://godbolt.org/z/PYGb-r

 


_______________________________________________
cfe-dev mailing list
[hidden email]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev