123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- #ifndef BOOST_SERIALIZATION_STATIC_WARNING_HPP
- #define BOOST_SERIALIZATION_STATIC_WARNING_HPP
- #if defined(_MSC_VER) && (_MSC_VER >= 1020)
- # pragma once
- #endif
- #include <boost/config.hpp>
- # if defined(BOOST_MSVC)
- # pragma warning(2:4150)
- # elif defined(BOOST_INTEL) && (defined(__WIN32__) || defined(WIN32))
- # pragma warning(2:457)
- # elif defined(__BORLANDC__) && (__BORLANDC__ <= 0x600)
- # pragma warn +stu
- # elif defined(__MWERKS__)
- # pragma extended_errorcheck on
- # endif
- # if defined(BOOST_INTEL)
- # elif defined(__PGI)
- # define BOOST_HAS_DESCRIPTIVE_DIVIDE_BY_ZERO_WARNING
- # elif defined(__GNUC__) && !defined(BOOST_INTEL)
- # define BOOST_HAS_DESCRIPTIVE_DIVIDE_BY_ZERO_WARNING
- # elif defined(__DECCXX)
- # define BOOST_HAS_DESCRIPTIVE_DIVIDE_BY_ZERO_WARNING
- # elif defined(__DMC__)
- # define BOOST_HAS_DESCRIPTIVE_RETURNING_ADDRESS_OF_TEMPORARY_WARNING
- # elif defined(BOOST_MSVC)
- # define BOOST_NO_PREDEFINED_LINE_MACRO
- # pragma warning(disable:4094)
- # else
- # define BOOST_HAS_DESCRIPTIVE_INCOMPLETE_TYPE_WARNING
- #endif
- namespace boost {
- namespace serialization {
- struct STATIC_WARNING;
- template<bool>
- struct static_warning_impl;
- template<>
- struct static_warning_impl<false> {
- enum { value = 0 };
- #if !defined(BOOST_HAS_DESCRIPTIVE_UNREFERENCED_VARIABLE_WARNING) && \
- !defined(BOOST_HAS_DESCRIPTIVE_RETURNING_ADDRESS_OF_TEMPORARY_WARNING)
- typedef boost::serialization::STATIC_WARNING type;
- #else
- typedef int type;
- #endif
- #if defined(BOOST_NO_PREDEFINED_LINE_MACRO)
- struct STATIC_WARNING { };
- #endif
- };
- template<>
- struct static_warning_impl<true> {
- enum { value = 1 };
- struct type { type() { } int* operator&() { return new int; } };
- #if defined(BOOST_NO_PREDEFINED_LINE_MACRO)
- class STATIC_WARNING { };
- #endif
- };
- }
- }
- #if defined(BOOST_HAS_DESCRIPTIVE_UNREFERENCED_VARIABLE_WARNING)
- # define BOOST_STATIC_WARNING_IMPL(B) \
- struct BOOST_JOIN(STATIC_WARNING, __LINE__) { \
- void f() { \
- ::boost::serialization::static_warning_impl<(bool)( B )>::type \
- STATIC_WARNING; \
- } \
- } \
-
- #elif defined(BOOST_HAS_DESCRIPTIVE_RETURNING_ADDRESS_OF_TEMPORARY_WARNING)
- # define BOOST_STATIC_WARNING_IMPL(B) \
- struct BOOST_JOIN(STATIC_WARNING, __LINE__) { \
- int* f() { \
- ::boost::serialization::static_warning_impl<(bool)( B )>::type \
- STATIC_WARNING; \
- return &STATIC_WARNING; \
- } \
- } \
-
- #elif defined(BOOST_HAS_DESCRIPTIVE_DIVIDE_BY_ZERO_WARNING)
- # define BOOST_STATIC_WARNING_IMPL(B) \
- struct BOOST_JOIN(STATIC_WARNING, __LINE__) { \
- int f() { \
- int STATIC_WARNING = 1; \
- return STATIC_WARNING / \
- boost::serialization::static_warning_impl<(bool)( B )>::value; } \
- } \
-
- #elif defined(BOOST_NO_PREDEFINED_LINE_MACRO)
-
-
- # define BOOST_STATIC_WARNING_IMPL(B) \
- struct BOOST_JOIN(STATIC_WARNING, __LINE__) { \
- struct S { \
- typedef boost::serialization::static_warning_impl<(bool)( B )> f; \
- friend class f::STATIC_WARNING; \
- }; \
- }; \
-
- #elif defined(BOOST_HAS_DESCRIPTIVE_INCOMPLETE_TYPE_WARNING)
- # define BOOST_STATIC_WARNING_IMPL(B) \
- struct BOOST_JOIN(STATIC_WARNING, __LINE__) { \
- ::boost::serialization::static_warning_impl<(bool)( B )>::type* p; \
- void f() { delete p; } \
- } \
-
- #else
- # define BOOST_STATIC_WARNING_IMPL(B)
- #endif
- #ifndef BOOST_DISABLE_STATIC_WARNINGS
- # define BOOST_STATIC_WARNING(B) BOOST_STATIC_WARNING_IMPL(B)
- #else
- # define BOOST_STATIC_WARNING(B) BOOST_STATIC_WARNING_IMPL(true)
- #endif
- #endif
|