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