1 ////////////////////////////////////////////////////////////////////////////// 2 // 3 // (C) Copyright Ion Gaztanaga 2014-2014. Distributed under the Boost 4 // Software License, Version 1.0. (See accompanying file 5 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 6 // 7 // See http://www.boost.org/libs/interprocess for documentation. 8 // 9 ////////////////////////////////////////////////////////////////////////////// 10 11 #ifndef BOOST_MOVE_DETAIL_WORKAROUND_HPP 12 #define BOOST_MOVE_DETAIL_WORKAROUND_HPP 13 14 #ifndef BOOST_CONFIG_HPP 15 # include <boost/config.hpp> 16 #endif 17 # 18 #if defined(BOOST_HAS_PRAGMA_ONCE) 19 # pragma once 20 #endif 21 22 #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) 23 #define BOOST_MOVE_PERFECT_FORWARDING 24 #endif 25 26 #if defined(__has_feature) 27 #define BOOST_MOVE_HAS_FEATURE __has_feature 28 #else 29 #define BOOST_MOVE_HAS_FEATURE(x) 0 30 #endif 31 32 #if BOOST_MOVE_HAS_FEATURE(address_sanitizer) || defined(__SANITIZE_ADDRESS__) 33 #define BOOST_MOVE_ADDRESS_SANITIZER_ON 34 #endif 35 36 //Macros for documentation purposes. For code, expands to the argument 37 #define BOOST_MOVE_IMPDEF(TYPE) TYPE 38 #define BOOST_MOVE_SEEDOC(TYPE) TYPE 39 #define BOOST_MOVE_DOC0PTR(TYPE) TYPE 40 #define BOOST_MOVE_DOC1ST(TYPE1, TYPE2) TYPE2 41 #define BOOST_MOVE_I , 42 #define BOOST_MOVE_DOCIGN(T1) T1 43 44 #if defined(__GNUC__) && (__GNUC__ == 4) && (__GNUC_MINOR__ < 5) && !defined(__clang__) 45 //Pre-standard rvalue binding rules 46 #define BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES 47 #elif defined(_MSC_VER) && (_MSC_VER == 1600) 48 //Standard rvalue binding rules but with some bugs 49 #define BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG 50 #define BOOST_MOVE_MSVC_AUTO_MOVE_RETURN_BUG 51 #elif defined(_MSC_VER) && (_MSC_VER == 1700) 52 #define BOOST_MOVE_MSVC_AUTO_MOVE_RETURN_BUG 53 #endif 54 55 #if defined(BOOST_MOVE_DISABLE_FORCEINLINE) 56 #define BOOST_MOVE_FORCEINLINE inline 57 #elif defined(BOOST_MOVE_FORCEINLINE_IS_BOOST_FORCELINE) 58 #define BOOST_MOVE_FORCEINLINE BOOST_FORCEINLINE 59 #elif defined(BOOST_MSVC) && defined(_DEBUG) 60 //"__forceinline" and MSVC seems to have some bugs in debug mode 61 #define BOOST_MOVE_FORCEINLINE inline 62 #elif defined(__GNUC__) && ((__GNUC__ < 4) || (__GNUC__ == 4 && (__GNUC_MINOR__ < 5))) 63 //Older GCCs have problems with forceinline 64 #define BOOST_MOVE_FORCEINLINE inline 65 #else 66 #define BOOST_MOVE_FORCEINLINE BOOST_FORCEINLINE 67 #endif 68 69 #endif //#ifndef BOOST_MOVE_DETAIL_WORKAROUND_HPP 70