The value of someOtherBaz.bar would be 3.
Static objects within a translation unit are constructed in the order they appear within the TU (note, there is no defined order of static object in different translation units).
- First,
baz will be constructed with the default constructor. This will set baz.bar to 3.
- Next
someOtherBaz will be constructed via the copy constructor. Since no copy constructor was defined, a default copy constructor will be used which will just copy each field. So someOtherBaz.bar will be given the value of 3.
- Finally, to construct
placeholder, baz.SetBar will be called which will also change the value of baz (but not someOtherBaz since they are independent objects; while you created someOtherBaz based on the value of baz, they are different objects so can change independently).
So, at the end, you'll have:
baz.bar: 4
someOtherBaz.bar: 3
placeholder: 4