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).
7 #if !defined(BOOST_VMD_DETAIL_IS_EMPTY_TUPLE_HPP)
8 #define BOOST_VMD_DETAIL_IS_EMPTY_TUPLE_HPP
10 #include <boost/preprocessor/comparison/equal.hpp>
11 #include <boost/preprocessor/control/iif.hpp>
12 #include <boost/preprocessor/tuple/elem.hpp>
13 #include <boost/preprocessor/tuple/size.hpp>
14 #include <boost/vmd/identity.hpp>
15 #include <boost/vmd/is_empty.hpp>
16 #include <boost/vmd/is_tuple.hpp>
18 #define BOOST_VMD_DETAIL_IS_EMPTY_TUPLE_CEM(tuple) \
19 BOOST_VMD_IS_EMPTY(BOOST_PP_TUPLE_ELEM(0,tuple)) \
22 #define BOOST_VMD_DETAIL_IS_EMPTY_TUPLE_SIZE(tuple) \
23 BOOST_VMD_IDENTITY_RESULT \
27 BOOST_PP_EQUAL(BOOST_PP_TUPLE_SIZE(tuple),1), \
28 BOOST_VMD_DETAIL_IS_EMPTY_TUPLE_CEM, \
29 BOOST_VMD_IDENTITY(0) \
35 #define BOOST_VMD_DETAIL_IS_EMPTY_TUPLE_SIZE_D(d,tuple) \
36 BOOST_VMD_IDENTITY_RESULT \
40 BOOST_PP_EQUAL_D(d,BOOST_PP_TUPLE_SIZE(tuple),1), \
41 BOOST_VMD_DETAIL_IS_EMPTY_TUPLE_CEM, \
42 BOOST_VMD_IDENTITY(0) \
48 #define BOOST_VMD_DETAIL_IS_EMPTY_TUPLE(tuple) \
49 BOOST_VMD_IDENTITY_RESULT \
53 BOOST_VMD_IS_TUPLE(tuple), \
54 BOOST_VMD_DETAIL_IS_EMPTY_TUPLE_SIZE, \
55 BOOST_VMD_IDENTITY(0) \
61 #define BOOST_VMD_DETAIL_IS_EMPTY_TUPLE_D(d,tuple) \
62 BOOST_VMD_IDENTITY_RESULT \
66 BOOST_VMD_IS_TUPLE(tuple), \
67 BOOST_VMD_DETAIL_IS_EMPTY_TUPLE_SIZE_D, \
68 BOOST_VMD_IDENTITY(0) \
74 #endif /* BOOST_VMD_DETAIL_IS_EMPTY_TUPLE_HPP */