Project

General

Profile

Actions

Defect #23

closed

default BitField assignment operator doesn't do what one might expect

Added by Tony Ciavarella over 3 years ago. Updated about 1 year ago.

Status:
Closed
Priority:
Normal
Target version:
Start date:
09/24/2020
Due date:
% Done:

0%

Estimated time:

Description

Consider this:

union A
{
    disorder::utility::BitField<uint64_t, 0, 32> x;
    disorder::utility::BitField<uint64_t, 32, 32> y;
    uint64_t all;
};

A a1, a2;

a1.x = 1;
a1.y = 2;

a2.x = a1.x; // this actually assigns all 64 bits of a1 to a2, not just the x 32-bits.

Consider overriding the default operator= to make this behave more intuitively. Overriding operator= will make BitField usage more complex because it will cause the move assignment operator, copy constructor, and move constructor to become non-trivial which will also bubble up to whatever data structures BitFields are used in.

Note that the above example can be made to do what is expected by writing it like this instead:

a2.x = a1.x.get(); // this only assigns the x 32-bits of a1 to a2.

Actions

Also available in: Atom PDF