boost/optional/optional.hpp: avoid gcc 3.2 warnings

[SVN r67109]
This commit is contained in:
Ralf W. Grosse-Kunstleve
2010-12-08 17:53:29 +00:00
parent f88c8ae423
commit d39627c5b6

View File

@ -103,6 +103,12 @@ class typed_in_place_factory_base ;
namespace optional_detail {
#if defined(__GNUC__) \
&& !(__GNUC__ == 3 && __GNUC_MINOR__ == 2) \
&& !defined(__INTEL_COMPILER)
#define BOOST_OPTIONAL_DETAIL_USE_ATTRIBUTE_MAY_ALIAS
#endif
// This local class is used instead of that in "aligned_storage.hpp"
// because I've found the 'official' class to ICE BCB5.5
// when some types are used with optional<>
@ -112,8 +118,8 @@ class aligned_storage
{
// Borland ICEs if unnamed unions are used for this!
union
#if defined(__GNUC__) && !defined(__INTEL_COMPILER)
// This works around GCC warnings about breaking strict aliasing rules when casting storage address to T*
#if defined(BOOST_OPTIONAL_DETAIL_USE_ATTRIBUTE_MAY_ALIAS)
__attribute__((may_alias))
#endif
dummy_u
@ -125,7 +131,7 @@ class aligned_storage
public:
#if defined(__GNUC__) && !defined(__INTEL_COMPILER)
#if defined(BOOST_OPTIONAL_DETAIL_USE_ATTRIBUTE_MAY_ALIAS)
void const* address() const { return &dummy_; }
void * address() { return &dummy_; }
#else
@ -437,7 +443,7 @@ class optional_base : public optional_tag
private :
// internal_type can be either T or reference_content<T>
#if defined(__GNUC__) && !defined(__INTEL_COMPILER)
#if defined(BOOST_OPTIONAL_DETAIL_USE_ATTRIBUTE_MAY_ALIAS)
// This workaround is supposed to silence GCC warnings about broken strict aliasing rules
internal_type const* get_object() const
{