| 1 | Index: optional.hpp
|
|---|
| 2 | ===================================================================
|
|---|
| 3 | --- optional.hpp (revision 67097)
|
|---|
| 4 | +++ optional.hpp (working copy)
|
|---|
| 5 | @@ -103,6 +103,12 @@
|
|---|
| 6 |
|
|---|
| 7 | namespace optional_detail {
|
|---|
| 8 |
|
|---|
| 9 | +#if defined(__GNUC__) \
|
|---|
| 10 | + && !(__GNUC__ == 3 && __GNUC_MINOR__ == 2) \
|
|---|
| 11 | + && !defined(__INTEL_COMPILER)
|
|---|
| 12 | +#define BOOST_OPTIONAL_DETAIL_USE_ATTRIBUTE_MAY_ALIAS
|
|---|
| 13 | +#endif
|
|---|
| 14 | +
|
|---|
| 15 | // This local class is used instead of that in "aligned_storage.hpp"
|
|---|
| 16 | // because I've found the 'official' class to ICE BCB5.5
|
|---|
| 17 | // when some types are used with optional<>
|
|---|
| 18 | @@ -112,8 +118,8 @@
|
|---|
| 19 | {
|
|---|
| 20 | // Borland ICEs if unnamed unions are used for this!
|
|---|
| 21 | union
|
|---|
| 22 | -#if defined(__GNUC__) && !defined(__INTEL_COMPILER)
|
|---|
| 23 | // This works around GCC warnings about breaking strict aliasing rules when casting storage address to T*
|
|---|
| 24 | +#if defined(BOOST_OPTIONAL_DETAIL_USE_ATTRIBUTE_MAY_ALIAS)
|
|---|
| 25 | __attribute__((may_alias))
|
|---|
| 26 | #endif
|
|---|
| 27 | dummy_u
|
|---|
| 28 | @@ -125,7 +131,7 @@
|
|---|
| 29 |
|
|---|
| 30 | public:
|
|---|
| 31 |
|
|---|
| 32 | -#if defined(__GNUC__) && !defined(__INTEL_COMPILER)
|
|---|
| 33 | +#if defined(BOOST_OPTIONAL_DETAIL_USE_ATTRIBUTE_MAY_ALIAS)
|
|---|
| 34 | void const* address() const { return &dummy_; }
|
|---|
| 35 | void * address() { return &dummy_; }
|
|---|
| 36 | #else
|
|---|
| 37 | @@ -437,7 +443,7 @@
|
|---|
| 38 | private :
|
|---|
| 39 |
|
|---|
| 40 | // internal_type can be either T or reference_content<T>
|
|---|
| 41 | -#if defined(__GNUC__) && !defined(__INTEL_COMPILER)
|
|---|
| 42 | +#if defined(BOOST_OPTIONAL_DETAIL_USE_ATTRIBUTE_MAY_ALIAS)
|
|---|
| 43 | // This workaround is supposed to silence GCC warnings about broken strict aliasing rules
|
|---|
| 44 | internal_type const* get_object() const
|
|---|
| 45 | {
|
|---|