mirror of
https://github.com/boostorg/preprocessor.git
synced 2025-07-12 12:06:34 +02:00
LIST_FOR_EACH_PRODUCT() added to library
[SVN r12571]
This commit is contained in:
@ -12,7 +12,8 @@
|
||||
|
||||
/* This example demonstrates the usage of preprocessor lists for generating C++ code. */
|
||||
|
||||
#include <boost/preprocessor/list/for_each.hpp>
|
||||
#include <boost/preprocessor/list/for_each_product.hpp>
|
||||
#include <boost/preprocessor/list/at.hpp>
|
||||
#include <boost/preprocessor/tuple/to_list.hpp>
|
||||
#include <boost/preprocessor/empty.hpp>
|
||||
|
||||
@ -20,18 +21,18 @@
|
||||
#define INTEGRAL_TYPES\
|
||||
BOOST_PP_TUPLE_TO_LIST(9,(char, signed char, unsigned char, short, unsigned short, int, unsigned, long, unsigned long))
|
||||
|
||||
/* List of invokeable cv-qualifiers. */
|
||||
#define CV_QUALIFIERS\
|
||||
BOOST_PP_TUPLE_TO_LIST(4,(BOOST_PP_EMPTY, const BOOST_PP_EMPTY, volatile BOOST_PP_EMPTY, const volatile BOOST_PP_EMPTY))
|
||||
|
||||
/* Template for testing whether a type is an integral type. */
|
||||
template<class T> struct is_integral {enum {value = false};};
|
||||
|
||||
/* Macro for defining a specialization of is_integral<> template.
|
||||
* NOTE: CV is invoked so that it is possible to pass empty cv-qualifiers.
|
||||
*/
|
||||
#define IS_INTEGRAL_SPECIALIZATION(_,CV,T)\
|
||||
template<> struct is_integral<CV() T> {enum {value = true};};
|
||||
/* Macro for defining a specialization of is_integral<> template. */
|
||||
#define IS_INTEGRAL_SPECIALIZATION(R,_,L)\
|
||||
template<> struct is_integral<BOOST_PP_LIST_AT(L,1)() BOOST_PP_LIST_AT(L,0)> {enum {value = true};};
|
||||
|
||||
BOOST_PP_LIST_FOR_EACH(IS_INTEGRAL_SPECIALIZATION, BOOST_PP_EMPTY, INTEGRAL_TYPES)
|
||||
BOOST_PP_LIST_FOR_EACH(IS_INTEGRAL_SPECIALIZATION, const BOOST_PP_EMPTY, INTEGRAL_TYPES)
|
||||
BOOST_PP_LIST_FOR_EACH(IS_INTEGRAL_SPECIALIZATION, volatile BOOST_PP_EMPTY, INTEGRAL_TYPES)
|
||||
BOOST_PP_LIST_FOR_EACH(IS_INTEGRAL_SPECIALIZATION, const volatile BOOST_PP_EMPTY, INTEGRAL_TYPES)
|
||||
BOOST_PP_LIST_FOR_EACH_PRODUCT(IS_INTEGRAL_SPECIALIZATION,_,BOOST_PP_TUPLE_TO_LIST(2,(CV_QUALIFIERS, INTEGRAL_TYPES)))
|
||||
#undef IS_INTEGRAL_SPECIALIZATION
|
||||
#undef CV_QUALIFIERS
|
||||
#undef INTEGRAL_TYPES
|
||||
|
Reference in New Issue
Block a user