
Michael Shepanski <mshepanski@gmail.com> writes:
The code below fails a compile-time assertion in boost 1.32.0 on MSVC 7.1.
This is because, internally, boost::optional uses boost::alignment_of, which produces the number 12, which is then passed as a template parameter to boost::type_with_alignment, which won't accept 12. Not sure where the blame lies. Is it with boost::alignment_of, for producing 12 in the first place? Perhaps not, since 12 is a multiple of 4, and the doco says boost::alignment_of is allowed to produce any multiple of the actual alignment value. So is the fault with boost::type_with_alignment, for not accepting 12? Or is there something wrong with the app?
I think the problem is that type_with_alignment can't find a type that has an alignment of 12. Producing an error in that case is the right behavior. We could add the type whose alignment_of<> is 12 to the reperotoire of types being tested by type_with_alignment...
#include <boost/optional.hpp>
class D { virtual ~D(); };
class E : virtual public D { virtual ~E(); unsigned long long m_i; };
boost::optional<E> s_optE;
Cheers, --- Michael Shepanski _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
-- Dave Abrahams Boost Consulting www.boost-consulting.com