1 2 // (C) Copyright Edward Diener 2011-2015 3 // Use, modification and distribution are subject to the Boost Software License, 4 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at 5 // http://www.boost.org/LICENSE_1_0.txt). 6 7 #if !defined(BOOST_VMD_DETAIL_IS_EMPTY_HPP) 8 #define BOOST_VMD_DETAIL_IS_EMPTY_HPP 9 10 #include <boost/preprocessor/punctuation/is_begin_parens.hpp> 11 12 #if BOOST_VMD_MSVC 13 14 # pragma warning(once:4002) 15 16 #define BOOST_VMD_DETAIL_IS_EMPTY_IIF_0(t, b) b 17 #define BOOST_VMD_DETAIL_IS_EMPTY_IIF_1(t, b) t 18 19 #if BOOST_VMD_MSVC_V8 20 21 #define BOOST_VMD_DETAIL_IS_EMPTY_PROCESS(param) \ 22 BOOST_PP_IS_BEGIN_PARENS \ 23 ( \ 24 BOOST_VMD_DETAIL_IS_EMPTY_NON_FUNCTION_C param () \ 25 ) \ 26 /**/ 27 28 #else 29 30 #define BOOST_VMD_DETAIL_IS_EMPTY_PROCESS(...) \ 31 BOOST_PP_IS_BEGIN_PARENS \ 32 ( \ 33 BOOST_VMD_DETAIL_IS_EMPTY_NON_FUNCTION_C __VA_ARGS__ () \ 34 ) \ 35 /**/ 36 37 #endif 38 39 #else 40 41 #define BOOST_VMD_DETAIL_IS_EMPTY_IIF_0(t, ...) __VA_ARGS__ 42 #define BOOST_VMD_DETAIL_IS_EMPTY_IIF_1(t, ...) t 43 44 #define BOOST_VMD_DETAIL_IS_EMPTY_PROCESS(...) \ 45 BOOST_PP_IS_BEGIN_PARENS \ 46 ( \ 47 BOOST_VMD_DETAIL_IS_EMPTY_NON_FUNCTION_C __VA_ARGS__ () \ 48 ) \ 49 /**/ 50 51 #endif /* BOOST_VMD_MSVC */ 52 53 #define BOOST_VMD_DETAIL_IS_EMPTY_PRIMITIVE_CAT(a, b) a ## b 54 #define BOOST_VMD_DETAIL_IS_EMPTY_IIF(bit) \ 55 BOOST_VMD_DETAIL_IS_EMPTY_PRIMITIVE_CAT(BOOST_VMD_DETAIL_IS_EMPTY_IIF_,bit) \ 56 /**/ 57 58 #define BOOST_VMD_DETAIL_IS_EMPTY_NON_FUNCTION_C(...) () 59 #define BOOST_VMD_DETAIL_IS_EMPTY_GEN_ZERO(...) 0 60 61 #endif /* BOOST_VMD_DETAIL_IS_EMPTY_HPP */ 62