boost::value_initialized<T>, as included with the release version of
Boost (current version: 1.39.0), has a conversion operator that breaks
the principle of "logical constness": The member function itself is
"const", but it returns a non-const reference to the data, T&.
Four months ago, I fixed this issue on the development trunk [51355],
replacing the conversion operator by a const and a non-const overload.
The const overload returns a const reference to the data. (Ticket
#2548.) After this fix, one specific version of a compiler yielded some
compiler errors at the regression page: Intel 9.0
In fact it only yielded two compiler errors: only for implicitly
conversions from value_initialized, and const
value_initialized. Other conversions went well, for example,
from const value_initialized<int> to const int&.
Now I wonder, because Intel 9.0 is an old compiler version, and the
regression failure occurs only in a very specific case, would it be
acceptable to leave the fix in there, and have it shipped with an
upcoming release version of Boost? Is anyone here likely to use the
next version of Boost, including value_initialized<T>, on Intel 9.0? If
so, would you find it acceptable to retrieve a reference to the data
from value_initialized<T> by using the value_initialized::data() member
function, or boost::get, instead of depending on implicit conversion?
Note: Five days ago I committed a workaround for Intel 9.0 to the trunk
[54502], removing the const-version of the overload. But it yielded
many more Intel 9.0 errors (33!), as expected, on any attempt to convert
a const value_initialized<T>. So does anyone here think this workaround
is still useful?
References:
Ticket #2548, "Let's fix the logical constness of value_initialized!"
https://svn.boost.org/trac/boost/ticket/2548
Utility/trunk regression page:
www.boost.org/development/tests/trunk/developer/utility_.html
[51355] Fix at the development trunk (4 months ago):
https://svn.boost.org/trac/boost/changeset/51355
[54502] Intel 9.0 specific workaround (5 days ago):
https://svn.boost.org/trac/boost/changeset/54502
Kind regards,
--
Niels Dekker
http://www.xs4all.nl/~nd/dekkerware
Scientific programmer at LKEB, Leiden University Medical Center