AlisdairM wrote:
John Maddock wrote:
However the change should be restricted to VC7.1 just to be sure.
Triple-checking, I believe you are correct. (and I have been through this dance more than once over the last 18 months)
It does mean that array would never be a POD, and not be admissible in unions. Those are lesser restrictions though, so I am less worried by them.
Actually if array ever became a non-POD that would be a serious breaking
change: POD's are initialised in the static initialisation phase and we
really do want:
boost::array
In principle the proposed workaround should be doing exactly the same as the implicitly declared copy-assignment operator, although it is potentially less efficient - especially in the POD case.
The question is - should we make this the default behaviour - banning POD-behaviour and unions; accept these restrictions on the MS compiler only and deem such use non-portable; or specialize on MS only, purely for the pointer-to-member case?
Personally I would add the template-assignment op for BOOST_MSVC < 1400
only, would we gain anything from adding it for other compilers? It opens
up an assignment that wasn't there before, so I guess it means array