diff --git a/doc/headers.html b/doc/headers.html
index 90b59fd..e96b25e 100644
--- a/doc/headers.html
+++ b/doc/headers.html
@@ -138,8 +138,10 @@
punctuation/
comma.hpp
comma_if.hpp
+ is_begin_parens.hpp (v)
paren.hpp
paren_if.hpp
+ remove_parens.hpp (v)
repeat.hpp*
repeat_2nd.hpp*
repeat_3rd.hpp*
diff --git a/doc/headers/array/to_list.html b/doc/headers/array/to_list.html
index 732cd0e..0c2d19a 100644
--- a/doc/headers/array/to_list.html
+++ b/doc/headers/array/to_list.html
@@ -11,7 +11,7 @@ defines a macro that converts an array to a list .
Contents
© Copyright Edward Diener 2011
diff --git a/doc/headers/punctuation/is_begin_parens.html b/doc/headers/punctuation/is_begin_parens.html
new file mode 100644
index 0000000..4897623
--- /dev/null
+++ b/doc/headers/punctuation/is_begin_parens.html
@@ -0,0 +1,26 @@
+
+
+
+ punctuation/is_begin_parens.hpp
+
+
+
+ The punctuation/is_begin_parens.hpp
+ header defines a macro that determines if variadic data begins with a
+ parenthesis.
+ Usage
+ #include <boost/preprocessor/punctuation/is_begin_parens.hpp>
+
+ Contents
+
+
+ © Copyright Edward Diener 2014
+
+
+
diff --git a/doc/headers/punctuation/remove_parens.html b/doc/headers/punctuation/remove_parens.html
new file mode 100644
index 0000000..f2b6e46
--- /dev/null
+++ b/doc/headers/punctuation/remove_parens.html
@@ -0,0 +1,26 @@
+
+
+
+ punctuation/remove_parens.hpp
+
+
+
+ The punctuation/remove_parens.hpp
+ header defines a macro that removes the beginning parenthesis from its
+ input if it exists.
+ Usage
+ #include <boost/preprocessor/punctuation/remove_parens.hpp>
+
+ Contents
+
+
+ © Copyright Edward Diener 2014
+
+
+
diff --git a/doc/ref.html b/doc/ref.html
index 82c2905..4d2081f 100644
--- a/doc/ref.html
+++ b/doc/ref.html
@@ -105,6 +105,7 @@
INCLUDE_SELF
INDIRECT_SELF
INTERCEPT
+ IS_BEGIN_PARENS (v)
IS_ITERATING
IS_SELFISH
ITERATE
@@ -209,6 +210,7 @@
RELATIVE_FLAGS
RELATIVE_ITERATION
RELATIVE_START
+ REMOVE_PARENS (v)
REPEAT
REPEAT_1ST*
REPEAT_2ND*
diff --git a/doc/ref/array_to_list.html b/doc/ref/array_to_list.html
index 607b205..2fdd247 100644
--- a/doc/ref/array_to_list.html
+++ b/doc/ref/array_to_list.html
@@ -1,33 +1,41 @@
-
- BOOST_PP_ARRAY_TO_LIST
-
-
-
- The BOOST_PP_ARRAY_TO_LIST
-macro converts an array to a list .
-Usage
- BOOST_PP_ARRAY_TO_LIST (array )
-
-Arguments
-array
- The array to be converted.
-
-
-Requirements
-
-Sample Code
-
-
- © Copyright Edward Diener 2011
-
-
+
+
+ BOOST_PP_ARRAY_TO_LIST
+
+
+
+ The BOOST_PP_ARRAY_TO_LIST macro
+ converts an array to a list .
+ Usage
+ BOOST_PP_ARRAY_TO_LIST (array )
+ Arguments
+
+ array
+ The array to be converted.
+
+
+ Remarks
+ If the array to be converted is empty, as
+ represented by '( 0, () )', the resulting list is empty, as
+ represented by 'BOOST_PP_NIL'.
+ Requirements
+
+ Sample Code
+
+
+ © Copyright Edward Diener 2011
+
+ s
+
diff --git a/doc/ref/array_to_seq.html b/doc/ref/array_to_seq.html
index 308b364..bf3518e 100644
--- a/doc/ref/array_to_seq.html
+++ b/doc/ref/array_to_seq.html
@@ -1,31 +1,37 @@
-
- BOOST_PP_ARRAY_TO_SEQ
-
-
-
- The BOOST_PP_ARRAY_TO_SEQ macro
-converts an array to a seq .
- Usage
- BOOST_PP_ARRAY_TO_SEQ (array )
-
- Arguments
-array
- The array to be converted.
-
- Requirements
-
- Sample Code
-
-
- © Copyright Edward Diener 2011
-
-
+
+
+ BOOST_PP_ARRAY_TO_SEQ
+
+
+
+ The BOOST_PP_ARRAY_TO_SEQ macro
+ converts an array to a seq .
+ Usage
+ BOOST_PP_ARRAY_TO_SEQ (array )
+ Arguments
+
+ array
+ The array to be converted.
+
+ Remarks
+ If the array to be converted is empty, as
+ represented by '( 0, () )', the resulting seq is undefined since a
+ seq cannot be empty.
+ Requirements
+
+ Sample Code
+
+
+ © Copyright Edward Diener 2011
+
+
diff --git a/doc/ref/array_to_tuple.html b/doc/ref/array_to_tuple.html
index 085dd39..8f9c958 100644
--- a/doc/ref/array_to_tuple.html
+++ b/doc/ref/array_to_tuple.html
@@ -1,31 +1,39 @@
-
- BOOST_PP_ARRAY_TO_TUPLE
-
-
-
- The BOOST_PP_ARRAY_TO_TUPLE macro
-converts an array to an tuple .
- Usage
- BOOST_PP_ARRAY_TO_TUPLE (array )
- Arguments
-
- array
- The array to be converted.
-
- Requirements
-
- Sample Code
-
-
- © Copyright Edward Diener 2011
-
-
+
+
+ BOOST_PP_ARRAY_TO_TUPLE
+
+
+
+ The BOOST_PP_ARRAY_TO_TUPLE macro
+ converts an array to an tuple .
+ Usage
+ BOOST_PP_ARRAY_TO_TUPLE (array )
+ Arguments
+
+ array
+ The array to be converted.
+
+ Remarks
+ If the array to be converted is empty, as
+ represented by '( 0, () )', the resulting tuple is undefined
+ since a tuple cannot be empty.
+ Requirements
+
+ Sample Code
+
+
+ © Copyright Edward Diener 2011
+
+
+
diff --git a/doc/ref/for_r.html b/doc/ref/for_r.html
index 3221f88..4014a53 100644
--- a/doc/ref/for_r.html
+++ b/doc/ref/for_r.html
@@ -135,7 +135,6 @@ TEMPLATE_TEMPLATE(2, 4, T)
© Copyright Housemarque Oy 2002
© Copyright Paul Mensonides 2002
© Copyright Edward Diener 2014
diff --git a/doc/ref/is_begin_parens.html b/doc/ref/is_begin_parens.html
new file mode 100644
index 0000000..0e0b39c
--- /dev/null
+++ b/doc/ref/is_begin_parens.html
@@ -0,0 +1,47 @@
+
+
+
+
BOOST_PP_IS_BEGIN_PARENS
+
+
+
+
The BOOST_PP_IS_BEGIN_PAREN S
+ determines whether the input starts with a set of parenthesis.
+
Usage
+
BOOST_PP_IS_BEGIN_PARENS (...)
(v)
+
Arguments
+
...
+ The input as variadic data.
+
Remarks
+
If the input input begins with a parenthesis, with any data within
+ that parenthesis, the macro returns 1, otherwise it returns 0. Data may
+ follow the beginning parenthesis and the macro still will return 1.
+
+ For Visual Studio 2005 ( VC8 ) the input data must be a single parameter
+ else a compilation error will occur.
+
See Also
+
+
Requirements
+
+
Sample Code
+
+
#include <boost/preprocessor/punctuation/is_begin_parens.hpp >
+
+#define VARDATA more_data , more_params #define VARDATAP ( data ) more_data , more_params #define DATA data #define DATAP ( data ) more_data
+BOOST_PP_IS_BEGIN_PARENS(VARDATA) // expands to 0, compiler error with VC8
+BOOST_PP_IS_BEGIN_PARENS(VARDATAP) // expands to 1, compiler error with VC8 BOOST_PP_IS_BEGIN_PARENS(DATA) // expands to 0
+BOOST_PP_IS_BEGIN_PARENS(DATAP) // expands to 1 BOOST_PP_IS_BEGIN_PARENS() // expands to 0
+
+
+
© Copyright Edward Diener 2014
+
+
+
diff --git a/doc/ref/list_to_array.html b/doc/ref/list_to_array.html
index b691b34..46154c9 100644
--- a/doc/ref/list_to_array.html
+++ b/doc/ref/list_to_array.html
@@ -1,39 +1,47 @@
-
-
BOOST_PP_LIST_TO_ARRAY
-
-
-
The BOOST_PP_LIST_TO_ARRAY macro
-converts a list to an array .
-
Usage
-
BOOST_PP_LIST_TO_ARRAY (list )
-
Arguments
-
- list
- The list to be converted.
-
-
Remarks
-
- This macro uses BOOST_PP_WHILE .
- Within BOOST_PP_WHILE , it is more efficient to use BOOST_PP_LIST_TO_ARRAY_D .
-
-
See Also
-
-
Requirements
-
-
Sample Code
-
-
-
© Copyright Edward Diener 2011
-
-
+
+
+
BOOST_PP_LIST_TO_ARRAY
+
+
+
+
The BOOST_PP_LIST_TO_ARRAY macro
+ converts a list to an array .
+
Usage
+
BOOST_PP_LIST_TO_ARRAY (list )
+
Arguments
+
+ list
+ The list to be converted.
+
+
+
Remarks
+
This macro uses BOOST_PP_WHILE . Within BOOST_PP_WHILE ,
+ it is more efficient to use BOOST_PP_LIST_TO_ARRAY_D .
+
+ If the list to be converted is empty, as represented by
+ 'BOOST_PP_NIL', the resulting array is empty, as represented by '( 0, ()
+ )'.
+
See Also
+
+
Requirements
+
+
Sample Code
+
+
+
© Copyright Edward Diener 2011
+
+
+
diff --git a/doc/ref/list_to_array_d.html b/doc/ref/list_to_array_d.html
index 8d93328..835d9e2 100644
--- a/doc/ref/list_to_array_d.html
+++ b/doc/ref/list_to_array_d.html
@@ -1,27 +1,34 @@
-
-
BOOST_PP_LIST_TO_ARRAY_D
-
-
-
-The BOOST_PP_LIST_TO_ARRAY_D macro converts a list to an array .
-It reenters BOOST_PP_WHILE with maximum efficiency.
-
-
Usage
-
BOOST_PP_LIST_TO_ARRAY_D (d , list )
-
Arguments
-
- d
- The next available BOOST_PP_WHILE iteration.
- list
- The list to be converted.
-
-
See Also
-
-
Requirements
-
-
+
+
+
BOOST_PP_LIST_TO_ARRAY_D
+
+
+
+
The BOOST_PP_LIST_TO_ARRAY_D macro
+ converts a list to an array . It reenters BOOST_PP_WHILE
+ with maximum efficiency.
+
Usage
+
BOOST_PP_LIST_TO_ARRAY_D (d , list )
+
+
Arguments
+
+ d
+ The next available BOOST_PP_WHILE iteration.
+ list
+ The list to be converted.
+
+
Remarks
+
If the list to be converted is empty, as
+ represented by 'BOOST_PP_NIL', the resulting array is empty, as
+ represented by '( 0, () )'.
+
See Also
+
See Also
+
+
Requirements
+
+
diff --git a/doc/ref/list_to_seq.html b/doc/ref/list_to_seq.html
index 2f77cf1..3efc7e1 100644
--- a/doc/ref/list_to_seq.html
+++ b/doc/ref/list_to_seq.html
@@ -1,40 +1,44 @@
-
-
BOOST_PP_LIST_TO_SEQ
-
-
-
-
The BOOST_PP_LIST_TO_SEQ macro
-converts a list to a seq .
-
Usage
-
BOOST_PP_LIST_TO_SEQ (list )
-
-
Arguments
-
list
- The list to be converted.
-
-
Remarks
-
- This macro uses BOOST_PP_FOR .
- Within BOOST_PP_FOR , it is more efficient to use BOOST_PP_LIST_TO_SEQ_R .
-
-
See Also
-
-
Requirements
-
-
Sample Code
-
-
-
© Copyright Edward Diener 2011
-
-
+
+
+
BOOST_PP_LIST_TO_SEQ
+
+
+
+
The BOOST_PP_LIST_TO_SEQ macro
+ converts a list to a seq .
+
Usage
+
BOOST_PP_LIST_TO_SEQ (list )
+
Arguments
+
+ list
+ The list to be converted.
+
+
Remarks
+
This macro uses BOOST_PP_FOR . Within BOOST_PP_FOR , it
+ is more efficient to use BOOST_PP_LIST_TO_SEQ_R .
+
+ If the list to be converted is empty, as represented by
+ 'BOOST_PP_NIL', the resulting seq is undefined since a seq
+ cannot be empty.
+
See Also
+
+
Requirements
+
+
Sample Code
+
+
+
© Copyright Edward Diener 2011
+
+
diff --git a/doc/ref/list_to_seq_r.html b/doc/ref/list_to_seq_r.html
index 2c2bb37..cc7a854 100644
--- a/doc/ref/list_to_seq_r.html
+++ b/doc/ref/list_to_seq_r.html
@@ -1,27 +1,32 @@
-
-
BOOST_PP_LIST_TO_SEQ_R
-
-
-
-The BOOST_PP_LIST_TO_SEQ_R macro converts a list to an seq .
-It reenters BOOST_PP_FOR with maximum efficiency.
-
-
Usage
-
BOOST_PP_LIST_TO_SEQ_R (r , list )
-
Arguments
-
- d
- The next available BOOST_PP_FOR repetition.
- list
- The list to be converted.
-
-
See Also
-
-
Requirements
-
-
+
+
+
BOOST_PP_LIST_TO_SEQ_R
+
+
+
+
The BOOST_PP_LIST_TO_SEQ_R macro
+ converts a list to a seq . It reenters BOOST_PP_FOR
+ with maximum efficiency.
+
Usage
+
BOOST_PP_LIST_TO_SEQ_R (r , list )
+
Arguments
+
+ d
+ The next available BOOST_PP_FOR repetition.
+ list
+ The list to be converted.
+
+
Remarks
+
If the list to be converted is empty, as
+ represented by 'BOOST_PP_NIL', the resulting seq is undefined
+ since a seq cannot be empty.
+
See Also
+
+
Requirements
+
+
diff --git a/doc/ref/list_to_tuple.html b/doc/ref/list_to_tuple.html
index 37e7311..d022c2b 100644
--- a/doc/ref/list_to_tuple.html
+++ b/doc/ref/list_to_tuple.html
@@ -1,62 +1,55 @@
-
-
BOOST_PP_LIST_TO_TUPLE
-
-
-
-
- The BOOST_PP_LIST_TO_TUPLE macro converts a list to a tuple .
-
-
Usage
-
- BOOST_PP_LIST_TO_TUPLE (list )
-
-
Arguments
-
- list
-
- The list to be converted.
-
-
-
Remarks
-
- If
list is, for example, (
a , (
b , (
c ,
BOOST_PP_NIL ))),
- this macro will produce:
-
- (a , b , c )
-
-
-
- Previously, this macro could not be used inside BOOST_PP_FOR .
- There is no longer any such restriction.
- It is more efficient, however, to use BOOST_PP_LIST_TO_TUPLE_R in such a situation.
-
-
See Also
-
-
Requirements
-
-
Sample Code
-
-#include <boost/preprocessor/list/to_tuple.hpp >
+
+
+ BOOST_PP_LIST_TO_TUPLE
+
+
+
+ The BOOST_PP_LIST_TO_TUPLE macro
+ converts a list to a tuple .
+ Usage
+ BOOST_PP_LIST_TO_TUPLE (list )
+ Arguments
+
+ list
+ The list to be converted.
+
+
Remarks
+
If
list is, for example, (
a , (
b , (
c ,
BOOST_PP_NIL ))),
+ this macro will produce:
+
(a , b , c )
+
+
Previously, this macro could not be used inside BOOST_PP_FOR .
+ There is no longer any such restriction. It is more efficient,
+ however, to use BOOST_PP_LIST_TO_TUPLE_R in such a situation.
+
+ If the list to be converted is empty, as represented by 'BOOST_PP_NIL',
+ the resulting tuple is undefined since a tuple cannot be
+ empty.
+
See Also
+
+
Requirements
+
+
Sample Code
+
-
-
-
© Copyright Housemarque Oy 2002
-
© Copyright Paul Mensonides 2002
-
-
-
+
+
+
+
diff --git a/doc/ref/list_to_tuple_r.html b/doc/ref/list_to_tuple_r.html
index 1ba51a0..0227d38 100644
--- a/doc/ref/list_to_tuple_r.html
+++ b/doc/ref/list_to_tuple_r.html
@@ -1,47 +1,42 @@
-
-
BOOST_PP_LIST_TO_TUPLE_R
-
-
-
-
- The BOOST_PP_LIST_TO_TUPLE_R macro converts a list to a tuple .
- It reenters BOOST_PP_FOR with maximum efficiency.
-
-
Usage
-
- BOOST_PP_LIST_TO_TUPLE_R (r , list )
-
-
Arguments
-
- r
-
- The next available BOOST_PP_FOR repetition.
-
- list
-
- The list to be converted.
-
-
-
Remarks
-
- If
list is, for example, (
a , (
b , (
c ,
BOOST_PP_NIL ))),
- this macro will produce:
-
- (a , b , c )
-
-
-
See Also
-
-
Requirements
-
-
Sample Code
-
-#include <boost/preprocessor/list/adt.hpp >
+
+
+ BOOST_PP_LIST_TO_TUPLE_R
+
+
+
+ The BOOST_PP_LIST_TO_TUPLE_R macro
+ converts a list to a tuple . It reenters BOOST_PP_FOR
+ with maximum efficiency.
+ Usage
+ BOOST_PP_LIST_TO_TUPLE_R (r , list )
+
+ Arguments
+
+ r
+ The next available BOOST_PP_FOR repetition.
+ list
+ The list to be converted.
+
+
Remarks
+
If list is, for example, (a , (b , (c ,
+ BOOST_PP_NIL ))), this macro will produce:
+
+
If the list to
+ be converted is empty, as represented by 'BOOST_PP_NIL', the resulting tuple
+ is undefined since a tuple cannot be empty.
+
See Also
+
+
Requirements
+
+
Sample Code
+
-
-
-
© Copyright Housemarque Oy 2002
-
© Copyright Paul Mensonides 2002
-
-
-
+
+
+
+
diff --git a/doc/ref/remove_parens.html b/doc/ref/remove_parens.html
new file mode 100644
index 0000000..72312dd
--- /dev/null
+++ b/doc/ref/remove_parens.html
@@ -0,0 +1,44 @@
+
+
+
+
BOOST_PP_REMOVE_PARENS
+
+
+
+
The BOOST_PP_REMOVE_PAREN S macro
+ removes the beginning parenthesis, if it exists, from the input data and
+ expands to the result
+
Usage
+
BOOST_PP_REMOVE_PARENS (param)
(v)
+
Arguments
+
param
+
+ The input data.
+
Remarks
+
If the input begins with a parenthesis, with any data within that
+ parenthesis, the macro removes the parenthesis and expands to the result.
+ If the input does not begin with a parenthesis the macro expands to the
+ input.
+
+
See Also
+
+
Requirements
+
+
Sample Code
+
+
+
© Copyright Edward Diener 2014
+
+
+
diff --git a/doc/ref/repeat_z.html b/doc/ref/repeat_z.html
index a2f21b8..f18da06 100644
--- a/doc/ref/repeat_z.html
+++ b/doc/ref/repeat_z.html
@@ -79,7 +79,6 @@
© Copyright Housemarque Oy 2002
© Copyright Paul Mensonides 2002
© Copyright Edward Diener 2014
diff --git a/doc/ref/seq_replace.html b/doc/ref/seq_replace.html
index c757113..9a64e5d 100644
--- a/doc/ref/seq_replace.html
+++ b/doc/ref/seq_replace.html
@@ -11,7 +11,7 @@
Usage
- BOOST_PP_SEQ_RPLACE (seq , i , elem )
+ BOOST_PP_SEQ_REPLACE (seq , i , elem )
Arguments
diff --git a/doc/ref/while_d.html b/doc/ref/while_d.html
index 42f9eab..b7077da 100644
--- a/doc/ref/while_d.html
+++ b/doc/ref/while_d.html
@@ -104,7 +104,6 @@ ACCUMULATE_D(1, ARRAY)// expands to 10
© Copyright Housemarque Oy 2002
© Copyright Paul Mensonides 2002
© Copyright Edward Diener 2014
diff --git a/include/boost/preprocessor/array/detail/get_data.hpp b/include/boost/preprocessor/array/detail/get_data.hpp
new file mode 100644
index 0000000..15ae740
--- /dev/null
+++ b/include/boost/preprocessor/array/detail/get_data.hpp
@@ -0,0 +1,55 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Edward Diener 2014. *
+# * Distributed under the Boost Software License, Version 1.0. (See *
+# * accompanying file LICENSE_1_0.txt or copy at *
+# * http://www.boost.org/LICENSE_1_0.txt) *
+# * *
+# ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ARRAY_DETAIL_GET_DATA_HPP
+# define BOOST_PREPROCESSOR_ARRAY_DETAIL_GET_DATA_HPP
+#
+# include
+# include
+# include
+# include
+# include
+#
+# /* BOOST_PP_ARRAY_DETAIL_GET_DATA */
+#
+# define BOOST_PP_ARRAY_DETAIL_GET_DATA_NONE(size, data)
+
+# if BOOST_PP_VARIADICS && !(BOOST_PP_VARIADICS_MSVC && _MSC_VER <= 1400)
+# if BOOST_PP_VARIADICS_MSVC
+# define BOOST_PP_ARRAY_DETAIL_GET_DATA_ANY_VC_DEFAULT(size, data) BOOST_PP_TUPLE_REM(size) data
+# define BOOST_PP_ARRAY_DETAIL_GET_DATA_ANY_VC_CAT(size, data) BOOST_PP_TUPLE_REM_CAT(size) data
+# define BOOST_PP_ARRAY_DETAIL_GET_DATA_ANY(size, data) \
+ BOOST_PP_IIF \
+ ( \
+ BOOST_PP_IS_1(size), \
+ BOOST_PP_ARRAY_DETAIL_GET_DATA_ANY_VC_CAT, \
+ BOOST_PP_ARRAY_DETAIL_GET_DATA_ANY_VC_DEFAULT \
+ ) \
+ (size,data) \
+/**/
+# else
+# define BOOST_PP_ARRAY_DETAIL_GET_DATA_ANY(size, data) BOOST_PP_TUPLE_REM(size) data
+# endif
+# else
+# define BOOST_PP_ARRAY_DETAIL_GET_DATA_ANY(size, data) BOOST_PP_TUPLE_REM(size) data
+# endif
+
+# define BOOST_PP_ARRAY_DETAIL_GET_DATA(size, data) \
+ BOOST_PP_IF \
+ ( \
+ size, \
+ BOOST_PP_ARRAY_DETAIL_GET_DATA_ANY, \
+ BOOST_PP_ARRAY_DETAIL_GET_DATA_NONE \
+ ) \
+ (size,data) \
+/**/
+#
+# endif /* BOOST_PREPROCESSOR_ARRAY_DETAIL_GET_DATA_HPP */
diff --git a/include/boost/preprocessor/array/push_back.hpp b/include/boost/preprocessor/array/push_back.hpp
index 6d98d8e..5dce9e0 100644
--- a/include/boost/preprocessor/array/push_back.hpp
+++ b/include/boost/preprocessor/array/push_back.hpp
@@ -1,6 +1,7 @@
# /* **************************************************************************
# * *
# * (C) Copyright Paul Mensonides 2002.
+# * (C) Copyright Edward Diener 2014.
# * Distributed under the Boost Software License, Version 1.0. (See
# * accompanying file LICENSE_1_0.txt or copy at
# * http://www.boost.org/LICENSE_1_0.txt)
@@ -18,6 +19,7 @@
# include
# include
# include
+# include
#
# /* BOOST_PP_ARRAY_PUSH_BACK */
#
@@ -28,6 +30,6 @@
# define BOOST_PP_ARRAY_PUSH_BACK_D(array, elem) BOOST_PP_ARRAY_PUSH_BACK_I(BOOST_PP_ARRAY_SIZE(array), BOOST_PP_ARRAY_DATA(array), elem)
# endif
#
-# define BOOST_PP_ARRAY_PUSH_BACK_I(size, data, elem) (BOOST_PP_INC(size), (BOOST_PP_TUPLE_REM(size) data BOOST_PP_COMMA_IF(size) elem))
+# define BOOST_PP_ARRAY_PUSH_BACK_I(size, data, elem) (BOOST_PP_INC(size), (BOOST_PP_ARRAY_DETAIL_GET_DATA(size,data) BOOST_PP_COMMA_IF(size) elem))
#
# endif
diff --git a/include/boost/preprocessor/array/push_front.hpp b/include/boost/preprocessor/array/push_front.hpp
index 59344c3..a6c6dc7 100644
--- a/include/boost/preprocessor/array/push_front.hpp
+++ b/include/boost/preprocessor/array/push_front.hpp
@@ -1,6 +1,7 @@
# /* **************************************************************************
# * *
# * (C) Copyright Paul Mensonides 2002.
+# * (C) Copyright Edward Diener 2014.
# * Distributed under the Boost Software License, Version 1.0. (See
# * accompanying file LICENSE_1_0.txt or copy at
# * http://www.boost.org/LICENSE_1_0.txt)
@@ -18,6 +19,7 @@
# include
# include
# include
+# include
#
# /* BOOST_PP_ARRAY_PUSH_FRONT */
#
@@ -28,6 +30,6 @@
# define BOOST_PP_ARRAY_PUSH_FRONT_D(array, elem) BOOST_PP_ARRAY_PUSH_FRONT_I(BOOST_PP_ARRAY_SIZE(array), BOOST_PP_ARRAY_DATA(array), elem)
# endif
#
-# define BOOST_PP_ARRAY_PUSH_FRONT_I(size, data, elem) (BOOST_PP_INC(size), (elem BOOST_PP_COMMA_IF(size) BOOST_PP_TUPLE_REM(size) data))
+# define BOOST_PP_ARRAY_PUSH_FRONT_I(size, data, elem) (BOOST_PP_INC(size), (elem BOOST_PP_COMMA_IF(size) BOOST_PP_ARRAY_DETAIL_GET_DATA(size,data)))
#
# endif
diff --git a/include/boost/preprocessor/array/to_list.hpp b/include/boost/preprocessor/array/to_list.hpp
index 9198561..4cb45b6 100644
--- a/include/boost/preprocessor/array/to_list.hpp
+++ b/include/boost/preprocessor/array/to_list.hpp
@@ -15,19 +15,33 @@
#
# include
# include
+# include
+# include
# include
#
# /* BOOST_PP_ARRAY_TO_LIST */
#
+# define BOOST_PP_ARRAY_TO_LIST(array) \
+ BOOST_PP_IF \
+ ( \
+ BOOST_PP_ARRAY_SIZE(array), \
+ BOOST_PP_ARRAY_TO_LIST_DO, \
+ BOOST_PP_ARRAY_TO_LIST_EMPTY \
+ ) \
+ (array) \
+/**/
+#
+# define BOOST_PP_ARRAY_TO_LIST_EMPTY(array) BOOST_PP_NIL
+#
# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
-# define BOOST_PP_ARRAY_TO_LIST(array) BOOST_PP_ARRAY_TO_LIST_I(BOOST_PP_TUPLE_TO_LIST, array)
+# define BOOST_PP_ARRAY_TO_LIST_DO(array) BOOST_PP_ARRAY_TO_LIST_I(BOOST_PP_TUPLE_TO_LIST, array)
# define BOOST_PP_ARRAY_TO_LIST_I(m, args) BOOST_PP_ARRAY_TO_LIST_II(m, args)
# define BOOST_PP_ARRAY_TO_LIST_II(m, args) BOOST_PP_CAT(m ## args,)
# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
-# define BOOST_PP_ARRAY_TO_LIST(array) BOOST_PP_ARRAY_TO_LIST_I(array)
+# define BOOST_PP_ARRAY_TO_LIST_DO(array) BOOST_PP_ARRAY_TO_LIST_I(array)
# define BOOST_PP_ARRAY_TO_LIST_I(array) BOOST_PP_TUPLE_TO_LIST ## array
# else
-# define BOOST_PP_ARRAY_TO_LIST(array) BOOST_PP_TUPLE_TO_LIST array
+# define BOOST_PP_ARRAY_TO_LIST_DO(array) BOOST_PP_TUPLE_TO_LIST array
# endif
#
# endif
diff --git a/include/boost/preprocessor/array/to_seq.hpp b/include/boost/preprocessor/array/to_seq.hpp
index ebcae53..7303f34 100644
--- a/include/boost/preprocessor/array/to_seq.hpp
+++ b/include/boost/preprocessor/array/to_seq.hpp
@@ -15,19 +15,32 @@
#
# include
# include
+# include
+# include
# include
#
# /* BOOST_PP_ARRAY_TO_SEQ */
#
+# define BOOST_PP_ARRAY_TO_SEQ(array) \
+ BOOST_PP_IF \
+ ( \
+ BOOST_PP_ARRAY_SIZE(array), \
+ BOOST_PP_ARRAY_TO_SEQ_DO, \
+ BOOST_PP_ARRAY_TO_SEQ_EMPTY \
+ ) \
+ (array) \
+/**/
+# define BOOST_PP_ARRAY_TO_SEQ_EMPTY(array)
+#
# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
-# define BOOST_PP_ARRAY_TO_SEQ(array) BOOST_PP_ARRAY_TO_SEQ_I(BOOST_PP_TUPLE_TO_SEQ, array)
+# define BOOST_PP_ARRAY_TO_SEQ_DO(array) BOOST_PP_ARRAY_TO_SEQ_I(BOOST_PP_TUPLE_TO_SEQ, array)
# define BOOST_PP_ARRAY_TO_SEQ_I(m, args) BOOST_PP_ARRAY_TO_SEQ_II(m, args)
# define BOOST_PP_ARRAY_TO_SEQ_II(m, args) BOOST_PP_CAT(m ## args,)
# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
-# define BOOST_PP_ARRAY_TO_SEQ(array) BOOST_PP_ARRAY_TO_SEQ_I(array)
+# define BOOST_PP_ARRAY_TO_SEQ_DO(array) BOOST_PP_ARRAY_TO_SEQ_I(array)
# define BOOST_PP_ARRAY_TO_SEQ_I(array) BOOST_PP_TUPLE_TO_SEQ ## array
# else
-# define BOOST_PP_ARRAY_TO_SEQ(array) BOOST_PP_TUPLE_TO_SEQ array
+# define BOOST_PP_ARRAY_TO_SEQ_DO(array) BOOST_PP_TUPLE_TO_SEQ array
# endif
#
# endif
diff --git a/include/boost/preprocessor/array/to_tuple.hpp b/include/boost/preprocessor/array/to_tuple.hpp
index eb83274..0d8defa 100644
--- a/include/boost/preprocessor/array/to_tuple.hpp
+++ b/include/boost/preprocessor/array/to_tuple.hpp
@@ -14,9 +14,20 @@
# define BOOST_PREPROCESSOR_ARRAY_TO_TUPLE_HPP
#
# include
+# include
+# include
#
# /* BOOST_PP_ARRAY_TO_TUPLE */
#
-# define BOOST_PP_ARRAY_TO_TUPLE BOOST_PP_ARRAY_DATA
+# define BOOST_PP_ARRAY_TO_TUPLE(array) \
+ BOOST_PP_IF \
+ ( \
+ BOOST_PP_ARRAY_SIZE(array), \
+ BOOST_PP_ARRAY_DATA, \
+ BOOST_PP_ARRAY_TO_TUPLE_EMPTY \
+ ) \
+ (array) \
+/**/
+# define BOOST_PP_ARRAY_TO_TUPLE_EMPTY(array)
#
# endif
diff --git a/include/boost/preprocessor/config/config.hpp b/include/boost/preprocessor/config/config.hpp
index b6afbab..0134d88 100644
--- a/include/boost/preprocessor/config/config.hpp
+++ b/include/boost/preprocessor/config/config.hpp
@@ -74,11 +74,8 @@
# /* variadic support explicitly disabled for all untested compilers */
# if defined __GCCXML__ || defined __CUDACC__ || defined __PATHSCALE__ || defined __DMC__ || defined __CODEGEARC__ || defined __BORLANDC__ || defined __MWERKS__ || defined __SUNPRO_CC || defined __HP_aCC && !defined __EDG__ || defined __MRC__ || defined __SC__ || defined __IBMCPP__ || defined __PGI
# define BOOST_PP_VARIADICS 0
-# /* Clang, all versions */
-# elif defined __clang__
-# define BOOST_PP_VARIADICS 1
# /* VC++ (C/C++) */
-# elif defined _MSC_VER && _MSC_VER >= 1400 && !defined __EDG__
+# elif defined _MSC_VER && _MSC_VER >= 1400 && !defined __EDG__ && !defined __clang__
# define BOOST_PP_VARIADICS 1
# define BOOST_PP_VARIADICS_MSVC 1
# /* Wave (C/C++), GCC (C++) */
diff --git a/include/boost/preprocessor/facilities/detail/is_empty.hpp b/include/boost/preprocessor/facilities/detail/is_empty.hpp
new file mode 100644
index 0000000..e044970
--- /dev/null
+++ b/include/boost/preprocessor/facilities/detail/is_empty.hpp
@@ -0,0 +1,55 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Edward Diener 2014.
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# * *
+# ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+#ifndef BOOST_PREPROCESSOR_DETAIL_IS_EMPTY_HPP
+#define BOOST_PREPROCESSOR_DETAIL_IS_EMPTY_HPP
+
+#include
+
+#if BOOST_PP_VARIADICS_MSVC
+
+# pragma warning(once:4002)
+
+#define BOOST_PP_DETAIL_IS_EMPTY_IIF_0(t, b) b
+#define BOOST_PP_DETAIL_IS_EMPTY_IIF_1(t, b) t
+
+#else
+
+#define BOOST_PP_DETAIL_IS_EMPTY_IIF_0(t, ...) __VA_ARGS__
+#define BOOST_PP_DETAIL_IS_EMPTY_IIF_1(t, ...) t
+
+#endif
+
+#if BOOST_PP_VARIADICS_MSVC && _MSC_VER <= 1400
+
+#define BOOST_PP_DETAIL_IS_EMPTY_PROCESS(param) \
+ BOOST_PP_IS_BEGIN_PARENS \
+ ( \
+ BOOST_PP_DETAIL_IS_EMPTY_NON_FUNCTION_C param () \
+ ) \
+/**/
+
+#else
+
+#define BOOST_PP_DETAIL_IS_EMPTY_PROCESS(...) \
+ BOOST_PP_IS_BEGIN_PARENS \
+ ( \
+ BOOST_PP_DETAIL_IS_EMPTY_NON_FUNCTION_C __VA_ARGS__ () \
+ ) \
+/**/
+
+#endif
+
+#define BOOST_PP_DETAIL_IS_EMPTY_PRIMITIVE_CAT(a, b) a ## b
+#define BOOST_PP_DETAIL_IS_EMPTY_IIF(bit) BOOST_PP_DETAIL_IS_EMPTY_PRIMITIVE_CAT(BOOST_PP_DETAIL_IS_EMPTY_IIF_,bit)
+#define BOOST_PP_DETAIL_IS_EMPTY_NON_FUNCTION_C(...) ()
+
+#endif /* BOOST_PREPROCESSOR_DETAIL_IS_EMPTY_HPP */
diff --git a/include/boost/preprocessor/facilities/empty.hpp b/include/boost/preprocessor/facilities/empty.hpp
index 46db190..6f215dc 100644
--- a/include/boost/preprocessor/facilities/empty.hpp
+++ b/include/boost/preprocessor/facilities/empty.hpp
@@ -14,6 +14,8 @@
# ifndef BOOST_PREPROCESSOR_FACILITIES_EMPTY_HPP
# define BOOST_PREPROCESSOR_FACILITIES_EMPTY_HPP
#
+# include
+#
# /* BOOST_PP_EMPTY */
#
# define BOOST_PP_EMPTY()
diff --git a/include/boost/preprocessor/facilities/is_empty.hpp b/include/boost/preprocessor/facilities/is_empty.hpp
index 638265c..d0403a9 100644
--- a/include/boost/preprocessor/facilities/is_empty.hpp
+++ b/include/boost/preprocessor/facilities/is_empty.hpp
@@ -1,6 +1,7 @@
# /* **************************************************************************
# * *
# * (C) Copyright Paul Mensonides 2003.
+# * (C) Copyright Edward Diener 2014.
# * Distributed under the Boost Software License, Version 1.0. (See
# * accompanying file LICENSE_1_0.txt or copy at
# * http://www.boost.org/LICENSE_1_0.txt)
@@ -13,17 +14,28 @@
# define BOOST_PREPROCESSOR_FACILITIES_IS_EMPTY_HPP
#
# include
-# include
+#
+# if BOOST_PP_VARIADICS
+#
+# include
+#
+# else
+#
+# include
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC() && ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
# include
-# include
+# include
+# else
+# include
# include
+# endif
#
# /* BOOST_PP_IS_EMPTY */
#
# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC() && ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
# define BOOST_PP_IS_EMPTY(x) BOOST_PP_IS_EMPTY_I(x BOOST_PP_IS_EMPTY_HELPER)
# define BOOST_PP_IS_EMPTY_I(contents) BOOST_PP_TUPLE_ELEM(2, 1, (BOOST_PP_IS_EMPTY_DEF_ ## contents()))
-# define BOOST_PP_IS_EMPTY_DEF_BOOST_PP_IS_EMPTY_HELPER 1, 1 BOOST_PP_EMPTY
+# define BOOST_PP_IS_EMPTY_DEF_BOOST_PP_IS_EMPTY_HELPER 1, BOOST_PP_IDENTITY(1)
# define BOOST_PP_IS_EMPTY_HELPER() , 0
# else
# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
@@ -40,4 +52,6 @@
# define BOOST_PP_IS_EMPTY_DEF_BOOST_PP_IS_EMPTY_HELPER 0, BOOST_PP_NIL
# endif
#
-# endif
+# endif /* BOOST_PP_VARIADICS */
+#
+# endif /* BOOST_PREPROCESSOR_FACILITIES_IS_EMPTY_HPP */
diff --git a/include/boost/preprocessor/facilities/is_empty_or_1.hpp b/include/boost/preprocessor/facilities/is_empty_or_1.hpp
index baa5da9..815666f 100644
--- a/include/boost/preprocessor/facilities/is_empty_or_1.hpp
+++ b/include/boost/preprocessor/facilities/is_empty_or_1.hpp
@@ -14,6 +14,7 @@
#
# include
# include
+# include
# include
# include
#
@@ -22,7 +23,7 @@
# define BOOST_PP_IS_EMPTY_OR_1(x) \
BOOST_PP_IIF( \
BOOST_PP_IS_EMPTY(x BOOST_PP_EMPTY()), \
- 1 BOOST_PP_EMPTY, \
+ BOOST_PP_IDENTITY(1), \
BOOST_PP_IS_1 \
)(x) \
/**/
diff --git a/include/boost/preprocessor/facilities/is_empty_variadic.hpp b/include/boost/preprocessor/facilities/is_empty_variadic.hpp
new file mode 100644
index 0000000..eee4062
--- /dev/null
+++ b/include/boost/preprocessor/facilities/is_empty_variadic.hpp
@@ -0,0 +1,57 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Edward Diener 2014.
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# * *
+# ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_FACILITIES_IS_EMPTY_VARIADIC_HPP
+# define BOOST_PREPROCESSOR_FACILITIES_IS_EMPTY_VARIADIC_HPP
+#
+# include
+#
+# if BOOST_PP_VARIADICS
+#
+# include
+# include
+#
+#if BOOST_PP_VARIADICS_MSVC && _MSC_VER <= 1400
+#
+#define BOOST_PP_IS_EMPTY(param) \
+ BOOST_PP_DETAIL_IS_EMPTY_IIF \
+ ( \
+ BOOST_PP_IS_BEGIN_PARENS \
+ ( \
+ param \
+ ) \
+ ) \
+ ( \
+ BOOST_PP_IS_EMPTY_ZERO, \
+ BOOST_PP_DETAIL_IS_EMPTY_PROCESS \
+ ) \
+ (param) \
+/**/
+#define BOOST_PP_IS_EMPTY_ZERO(param) 0
+# else
+#define BOOST_PP_IS_EMPTY(...) \
+ BOOST_PP_DETAIL_IS_EMPTY_IIF \
+ ( \
+ BOOST_PP_IS_BEGIN_PARENS \
+ ( \
+ __VA_ARGS__ \
+ ) \
+ ) \
+ ( \
+ BOOST_PP_IS_EMPTY_ZERO, \
+ BOOST_PP_DETAIL_IS_EMPTY_PROCESS \
+ ) \
+ (__VA_ARGS__) \
+/**/
+#define BOOST_PP_IS_EMPTY_ZERO(...) 0
+# endif /* BOOST_PP_VARIADICS_MSVC && _MSC_VER <= 1400 */
+# endif /* BOOST_PP_VARIADICS */
+# endif /* BOOST_PREPROCESSOR_FACILITIES_IS_EMPTY_VARIADIC_HPP */
diff --git a/include/boost/preprocessor/list/to_array.hpp b/include/boost/preprocessor/list/to_array.hpp
index 83f8a63..20829b9 100644
--- a/include/boost/preprocessor/list/to_array.hpp
+++ b/include/boost/preprocessor/list/to_array.hpp
@@ -1,6 +1,7 @@
# /* **************************************************************************
# * *
-# * (C) Copyright Edward Diener 2011.
+# * (C) Copyright Paul Mensonides 2011.
+# * (C) Copyright Edward Diener 2011,2014.
# * Distributed under the Boost Software License, Version 1.0. (See
# * accompanying file LICENSE_1_0.txt or copy at
# * http://www.boost.org/LICENSE_1_0.txt)
@@ -19,10 +20,27 @@
# include
# include
# include
+# if BOOST_PP_VARIADICS && BOOST_PP_VARIADICS_MSVC && (_MSC_VER <= 1400)
+# include
+# endif
#
# /* BOOST_PP_LIST_TO_ARRAY */
#
+# if BOOST_PP_VARIADICS && BOOST_PP_VARIADICS_MSVC && (_MSC_VER <= 1400)
+# define BOOST_PP_LIST_TO_ARRAY(list) \
+ BOOST_PP_IIF \
+ ( \
+ BOOST_PP_LIST_IS_NIL(list), \
+ BOOST_PP_LIST_TO_ARRAY_VC8ORLESS_EMPTY, \
+ BOOST_PP_LIST_TO_ARRAY_VC8ORLESS_DO \
+ ) \
+ (list) \
+/**/
+# define BOOST_PP_LIST_TO_ARRAY_VC8ORLESS_EMPTY(list) (0,())
+# define BOOST_PP_LIST_TO_ARRAY_VC8ORLESS_DO(list) BOOST_PP_LIST_TO_ARRAY_I(BOOST_PP_WHILE, list)
+# else
# define BOOST_PP_LIST_TO_ARRAY(list) BOOST_PP_LIST_TO_ARRAY_I(BOOST_PP_WHILE, list)
+# endif
# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
# define BOOST_PP_LIST_TO_ARRAY_I(w, list) \
@@ -118,6 +136,20 @@
#
# /* BOOST_PP_LIST_TO_ARRAY_D */
#
+# if BOOST_PP_VARIADICS && BOOST_PP_VARIADICS_MSVC && (_MSC_VER <= 1400)
+# define BOOST_PP_LIST_TO_ARRAY_D(d, list) \
+ BOOST_PP_IIF \
+ ( \
+ BOOST_PP_LIST_IS_NIL(list), \
+ BOOST_PP_LIST_TO_ARRAY_D_VC8ORLESS_EMPTY, \
+ BOOST_PP_LIST_TO_ARRAY_D_VC8ORLESS_DO \
+ ) \
+ (d, list) \
+/**/
+# define BOOST_PP_LIST_TO_ARRAY_D_VC8ORLESS_EMPTY(d, list) (0,())
+# define BOOST_PP_LIST_TO_ARRAY_D_VC8ORLESS_DO(d, list) BOOST_PP_LIST_TO_ARRAY_I(BOOST_PP_WHILE_ ## d, list)
+# else
# define BOOST_PP_LIST_TO_ARRAY_D(d, list) BOOST_PP_LIST_TO_ARRAY_I(BOOST_PP_WHILE_ ## d, list)
+# endif
#
# endif /* BOOST_PREPROCESSOR_LIST_TO_ARRAY_HPP */
diff --git a/include/boost/preprocessor/list/to_tuple.hpp b/include/boost/preprocessor/list/to_tuple.hpp
index 557de36..c7b3da8 100644
--- a/include/boost/preprocessor/list/to_tuple.hpp
+++ b/include/boost/preprocessor/list/to_tuple.hpp
@@ -16,22 +16,45 @@
#
# include
# include
+# include
#
# /* BOOST_PP_LIST_TO_TUPLE */
#
+# define BOOST_PP_LIST_TO_TUPLE(list) \
+ BOOST_PP_IIF \
+ ( \
+ BOOST_PP_LIST_IS_NIL(list), \
+ BOOST_PP_LIST_TO_TUPLE_EMPTY, \
+ BOOST_PP_LIST_TO_TUPLE_DO \
+ ) \
+ (list) \
+/**/
+# define BOOST_PP_LIST_TO_TUPLE_EMPTY(list)
+#
# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
-# define BOOST_PP_LIST_TO_TUPLE(list) (BOOST_PP_LIST_ENUM(list))
+# define BOOST_PP_LIST_TO_TUPLE_DO(list) (BOOST_PP_LIST_ENUM(list))
# else
-# define BOOST_PP_LIST_TO_TUPLE(list) BOOST_PP_LIST_TO_TUPLE_I(list)
+# define BOOST_PP_LIST_TO_TUPLE_DO(list) BOOST_PP_LIST_TO_TUPLE_I(list)
# define BOOST_PP_LIST_TO_TUPLE_I(list) (BOOST_PP_LIST_ENUM(list))
# endif
#
# /* BOOST_PP_LIST_TO_TUPLE_R */
#
+# define BOOST_PP_LIST_TO_TUPLE_R(r, list) \
+ BOOST_PP_IIF \
+ ( \
+ BOOST_PP_LIST_IS_NIL(list), \
+ BOOST_PP_LIST_TO_TUPLE_R_EMPTY, \
+ BOOST_PP_LIST_TO_TUPLE_R_DO \
+ ) \
+ (r, list) \
+/**/
+# define BOOST_PP_LIST_TO_TUPLE_R_EMPTY(r,list)
+#
# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
-# define BOOST_PP_LIST_TO_TUPLE_R(r, list) (BOOST_PP_LIST_ENUM_R(r, list))
+# define BOOST_PP_LIST_TO_TUPLE_R_DO(r, list) (BOOST_PP_LIST_ENUM_R(r, list))
# else
-# define BOOST_PP_LIST_TO_TUPLE_R(r, list) BOOST_PP_LIST_TO_TUPLE_R_I(r, list)
+# define BOOST_PP_LIST_TO_TUPLE_R_DO(r, list) BOOST_PP_LIST_TO_TUPLE_R_I(r, list)
# define BOOST_PP_LIST_TO_TUPLE_R_I(r, list) (BOOST_PP_LIST_ENUM_R(r, list))
# endif
#
diff --git a/include/boost/preprocessor/punctuation.hpp b/include/boost/preprocessor/punctuation.hpp
index 72da73e..56dd064 100644
--- a/include/boost/preprocessor/punctuation.hpp
+++ b/include/boost/preprocessor/punctuation.hpp
@@ -14,7 +14,9 @@
#
# include
# include
+# include
# include
# include
+# include
#
# endif
diff --git a/include/boost/preprocessor/punctuation/detail/is_begin_parens.hpp b/include/boost/preprocessor/punctuation/detail/is_begin_parens.hpp
new file mode 100644
index 0000000..c94ccf3
--- /dev/null
+++ b/include/boost/preprocessor/punctuation/detail/is_begin_parens.hpp
@@ -0,0 +1,48 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Edward Diener 2014.
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# * *
+# ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+#ifndef BOOST_PREPROCESSOR_DETAIL_IS_BEGIN_PARENS_HPP
+#define BOOST_PREPROCESSOR_DETAIL_IS_BEGIN_PARENS_HPP
+
+#if BOOST_PP_VARIADICS_MSVC
+
+#include
+
+#define BOOST_PP_DETAIL_VD_IBP_CAT(a, b) BOOST_PP_DETAIL_VD_IBP_CAT_I(a, b)
+#define BOOST_PP_DETAIL_VD_IBP_CAT_I(a, b) BOOST_PP_DETAIL_VD_IBP_CAT_II(a ## b)
+#define BOOST_PP_DETAIL_VD_IBP_CAT_II(res) res
+
+#define BOOST_PP_DETAIL_IBP_SPLIT(i, ...) \
+ BOOST_PP_DETAIL_VD_IBP_CAT(BOOST_PP_DETAIL_IBP_PRIMITIVE_CAT(BOOST_PP_DETAIL_IBP_SPLIT_,i)(__VA_ARGS__),BOOST_PP_EMPTY()) \
+/**/
+
+#define BOOST_PP_DETAIL_IBP_IS_VARIADIC_C(...) 1 1
+
+#else
+
+#define BOOST_PP_DETAIL_IBP_SPLIT(i, ...) \
+ BOOST_PP_DETAIL_IBP_PRIMITIVE_CAT(BOOST_PP_DETAIL_IBP_SPLIT_,i)(__VA_ARGS__) \
+/**/
+
+#define BOOST_PP_DETAIL_IBP_IS_VARIADIC_C(...) 1
+
+#endif /* BOOST_PP_VARIADICS_MSVC */
+
+#define BOOST_PP_DETAIL_IBP_SPLIT_0(a, ...) a
+#define BOOST_PP_DETAIL_IBP_SPLIT_1(a, ...) __VA_ARGS__
+
+#define BOOST_PP_DETAIL_IBP_CAT(a, ...) BOOST_PP_DETAIL_IBP_PRIMITIVE_CAT(a,__VA_ARGS__)
+#define BOOST_PP_DETAIL_IBP_PRIMITIVE_CAT(a, ...) a ## __VA_ARGS__
+
+#define BOOST_PP_DETAIL_IBP_IS_VARIADIC_R_1 1,
+#define BOOST_PP_DETAIL_IBP_IS_VARIADIC_R_BOOST_PP_DETAIL_IBP_IS_VARIADIC_C 0,
+
+#endif /* BOOST_PREPROCESSOR_DETAIL_IS_BEGIN_PARENS_HPP */
diff --git a/include/boost/preprocessor/punctuation/is_begin_parens.hpp b/include/boost/preprocessor/punctuation/is_begin_parens.hpp
new file mode 100644
index 0000000..20b32bc
--- /dev/null
+++ b/include/boost/preprocessor/punctuation/is_begin_parens.hpp
@@ -0,0 +1,51 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Edward Diener 2014.
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# * *
+# ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_IS_BEGIN_PARENS_HPP
+# define BOOST_PREPROCESSOR_IS_BEGIN_PARENS_HPP
+
+# include
+
+#if BOOST_PP_VARIADICS
+
+#include
+
+#if BOOST_PP_VARIADICS_MSVC && _MSC_VER <= 1400
+
+#define BOOST_PP_IS_BEGIN_PARENS(param) \
+ BOOST_PP_DETAIL_IBP_SPLIT \
+ ( \
+ 0, \
+ BOOST_PP_DETAIL_IBP_CAT \
+ ( \
+ BOOST_PP_DETAIL_IBP_IS_VARIADIC_R_, \
+ BOOST_PP_DETAIL_IBP_IS_VARIADIC_C param \
+ ) \
+ ) \
+/**/
+
+#else
+
+#define BOOST_PP_IS_BEGIN_PARENS(...) \
+ BOOST_PP_DETAIL_IBP_SPLIT \
+ ( \
+ 0, \
+ BOOST_PP_DETAIL_IBP_CAT \
+ ( \
+ BOOST_PP_DETAIL_IBP_IS_VARIADIC_R_, \
+ BOOST_PP_DETAIL_IBP_IS_VARIADIC_C __VA_ARGS__ \
+ ) \
+ ) \
+/**/
+
+#endif /* BOOST_PP_VARIADICS_MSVC && _MSC_VER <= 1400 */
+#endif /* BOOST_PP_VARIADICS */
+#endif /* BOOST_PREPROCESSOR_IS_BEGIN_PARENS_HPP */
diff --git a/include/boost/preprocessor/punctuation/remove_parens.hpp b/include/boost/preprocessor/punctuation/remove_parens.hpp
new file mode 100644
index 0000000..4700936
--- /dev/null
+++ b/include/boost/preprocessor/punctuation/remove_parens.hpp
@@ -0,0 +1,39 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Edward Diener 2014.
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# * *
+# ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+#ifndef BOOST_PREPROCESSOR_REMOVE_PARENS_HPP
+#define BOOST_PREPROCESSOR_REMOVE_PARENS_HPP
+
+#include
+
+#if BOOST_PP_VARIADICS
+
+#include
+#include
+#include
+#include
+
+#define BOOST_PP_REMOVE_PARENS(param) \
+ BOOST_PP_IIF \
+ ( \
+ BOOST_PP_IS_BEGIN_PARENS(param), \
+ BOOST_PP_REMOVE_PARENS_DO, \
+ BOOST_PP_IDENTITY \
+ ) \
+ (param)() \
+/**/
+
+#define BOOST_PP_REMOVE_PARENS_DO(param) \
+ BOOST_PP_IDENTITY(BOOST_PP_TUPLE_ENUM(param)) \
+/**/
+
+#endif /* BOOST_PP_VARIADICS */
+#endif /* BOOST_PREPROCESSOR_REMOVE_PARENS_HPP */
diff --git a/include/boost/preprocessor/seq/detail/binary_transform.hpp b/include/boost/preprocessor/seq/detail/binary_transform.hpp
index 373e8a5..70897b0 100644
--- a/include/boost/preprocessor/seq/detail/binary_transform.hpp
+++ b/include/boost/preprocessor/seq/detail/binary_transform.hpp
@@ -16,6 +16,7 @@
# include
# include
# include
+# include
#
# /* BOOST_PP_SEQ_BINARY_TRANSFORM */
#
@@ -28,8 +29,15 @@
# define BOOST_PP_SEQ_BINARY_TRANSFORM(seq) BOOST_PP_CAT(BOOST_PP_SEQ_BINARY_TRANSFORM_A seq, 0)
# endif
# if BOOST_PP_VARIADICS
-# define BOOST_PP_SEQ_BINARY_TRANSFORM_A(...) (BOOST_PP_REM, __VA_ARGS__)() BOOST_PP_SEQ_BINARY_TRANSFORM_B
-# define BOOST_PP_SEQ_BINARY_TRANSFORM_B(...) (BOOST_PP_REM, __VA_ARGS__)() BOOST_PP_SEQ_BINARY_TRANSFORM_A
+# if BOOST_PP_VARIADICS_MSVC
+# define BOOST_PP_SEQ_BINARY_TRANSFORM_GET_REM(...) \
+ BOOST_PP_VARIADIC_IS_SINGLE_RETURN(BOOST_PP_REM_CAT,BOOST_PP_REM,__VA_ARGS__) \
+ /**/
+# else
+# define BOOST_PP_SEQ_BINARY_TRANSFORM_GET_REM(...) BOOST_PP_REM
+# endif
+# define BOOST_PP_SEQ_BINARY_TRANSFORM_A(...) (BOOST_PP_SEQ_BINARY_TRANSFORM_GET_REM(__VA_ARGS__), __VA_ARGS__)() BOOST_PP_SEQ_BINARY_TRANSFORM_B
+# define BOOST_PP_SEQ_BINARY_TRANSFORM_B(...) (BOOST_PP_SEQ_BINARY_TRANSFORM_GET_REM(__VA_ARGS__), __VA_ARGS__)() BOOST_PP_SEQ_BINARY_TRANSFORM_A
# else
# define BOOST_PP_SEQ_BINARY_TRANSFORM_A(e) (BOOST_PP_REM, e)() BOOST_PP_SEQ_BINARY_TRANSFORM_B
# define BOOST_PP_SEQ_BINARY_TRANSFORM_B(e) (BOOST_PP_REM, e)() BOOST_PP_SEQ_BINARY_TRANSFORM_A
diff --git a/include/boost/preprocessor/seq/rest_n.hpp b/include/boost/preprocessor/seq/rest_n.hpp
index 7e589cc..6423376 100644
--- a/include/boost/preprocessor/seq/rest_n.hpp
+++ b/include/boost/preprocessor/seq/rest_n.hpp
@@ -14,17 +14,17 @@
#
# include
# include
-# include
+# include
# include
# include
#
# /* BOOST_PP_SEQ_REST_N */
#
# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
-# define BOOST_PP_SEQ_REST_N(n, seq) BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_SEQ_SPLIT(BOOST_PP_INC(n), (nil) seq BOOST_PP_EMPTY))()
+# define BOOST_PP_SEQ_REST_N(n, seq) BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_SEQ_SPLIT(BOOST_PP_INC(n), BOOST_PP_IDENTITY( (nil) seq )))()
# else
# define BOOST_PP_SEQ_REST_N(n, seq) BOOST_PP_SEQ_REST_N_I(n, seq)
-# define BOOST_PP_SEQ_REST_N_I(n, seq) BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_SEQ_SPLIT(BOOST_PP_INC(n), (nil) seq BOOST_PP_EMPTY))()
+# define BOOST_PP_SEQ_REST_N_I(n, seq) BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_SEQ_SPLIT(BOOST_PP_INC(n), BOOST_PP_IDENTITY( (nil) seq )))()
# endif
#
# endif
diff --git a/include/boost/preprocessor/tuple/detail/is_single_return.hpp b/include/boost/preprocessor/tuple/detail/is_single_return.hpp
new file mode 100644
index 0000000..02a4fb2
--- /dev/null
+++ b/include/boost/preprocessor/tuple/detail/is_single_return.hpp
@@ -0,0 +1,28 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Edward Diener 2014. *
+# * Distributed under the Boost Software License, Version 1.0. (See *
+# * accompanying file LICENSE_1_0.txt or copy at *
+# * http://www.boost.org/LICENSE_1_0.txt) *
+# * *
+# ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_TUPLE_DETAIL_IS_SINGLE_RETURN_HPP
+# define BOOST_PREPROCESSOR_TUPLE_DETAIL_IS_SINGLE_RETURN_HPP
+#
+# include
+#
+# /* BOOST_PP_TUPLE_IS_SINGLE_RETURN */
+#
+# if BOOST_PP_VARIADICS && BOOST_PP_VARIADICS_MSVC
+# include
+# include
+# include
+# define BOOST_PP_TUPLE_IS_SINGLE_RETURN(sr,nsr,tuple) \
+ BOOST_PP_IIF(BOOST_PP_IS_1(BOOST_PP_TUPLE_SIZE(tuple)),sr,nsr) \
+ /**/
+# endif /* BOOST_PP_VARIADICS && BOOST_PP_VARIADICS_MSVC */
+#
+# endif /* BOOST_PREPROCESSOR_TUPLE_DETAIL_IS_SINGLE_RETURN_HPP */
diff --git a/include/boost/preprocessor/tuple/elem.hpp b/include/boost/preprocessor/tuple/elem.hpp
index 3eba1c5..0ee8a3f 100644
--- a/include/boost/preprocessor/tuple/elem.hpp
+++ b/include/boost/preprocessor/tuple/elem.hpp
@@ -8,7 +8,7 @@
# */
#
# /* Revised by Paul Mensonides (2002-2011) */
-# /* Revised by Edward Diener (2011) */
+# /* Revised by Edward Diener (2011,2014) */
#
# /* See http://www.boost.org for most recent version. */
#
@@ -17,19 +17,29 @@
#
# include
# include
+# include
# include
# include
# include
+# include
#
# if BOOST_PP_VARIADICS
# if BOOST_PP_VARIADICS_MSVC
# define BOOST_PP_TUPLE_ELEM(...) BOOST_PP_TUPLE_ELEM_I(BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_ELEM_O_, __VA_ARGS__), (__VA_ARGS__))
# define BOOST_PP_TUPLE_ELEM_I(m, args) BOOST_PP_TUPLE_ELEM_II(m, args)
-# define BOOST_PP_TUPLE_ELEM_II(m, args) BOOST_PP_CAT(m ## args,)
+# define BOOST_PP_TUPLE_ELEM_II(m, args) BOOST_PP_CAT(BOOST_PP_EXPAND(m ## args),)
+/*
+ Use BOOST_PP_REM_CAT if it is a single element tuple ( which might be empty )
+ else use BOOST_PP_REM. This fixes a VC++ problem with an empty tuple and BOOST_PP_TUPLE_ELEM
+ functionality. See tuple_elem_bug_test.cxx.
+*/
+# define BOOST_PP_TUPLE_ELEM_O_2(n, tuple) \
+ BOOST_PP_VARIADIC_ELEM(n, BOOST_PP_TUPLE_IS_SINGLE_RETURN(BOOST_PP_REM_CAT,BOOST_PP_REM,tuple) tuple) \
+ /**/
# else
# define BOOST_PP_TUPLE_ELEM(...) BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_ELEM_O_, __VA_ARGS__)(__VA_ARGS__)
+# define BOOST_PP_TUPLE_ELEM_O_2(n, tuple) BOOST_PP_VARIADIC_ELEM(n, BOOST_PP_REM tuple)
# endif
-# define BOOST_PP_TUPLE_ELEM_O_2(n, tuple) BOOST_PP_VARIADIC_ELEM(n, BOOST_PP_REM tuple)
# define BOOST_PP_TUPLE_ELEM_O_3(size, n, tuple) BOOST_PP_TUPLE_ELEM_O_2(n, tuple)
# else
# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
diff --git a/include/boost/preprocessor/tuple/rem.hpp b/include/boost/preprocessor/tuple/rem.hpp
index 270c31a..fe8a7d2 100644
--- a/include/boost/preprocessor/tuple/rem.hpp
+++ b/include/boost/preprocessor/tuple/rem.hpp
@@ -15,11 +15,17 @@
#
# include
# include
+# include
# include
+# include
#
# /* BOOST_PP_REM */
#
# if BOOST_PP_VARIADICS
+# if BOOST_PP_VARIADICS_MSVC
+ /* To be used internally when __VA_ARGS__ could be empty ( or is a single element ) */
+# define BOOST_PP_REM_CAT(...) BOOST_PP_CAT(__VA_ARGS__,)
+# endif
# define BOOST_PP_REM(...) __VA_ARGS__
# else
# define BOOST_PP_REM(x) x
@@ -30,7 +36,11 @@
/*
VC++8.0 cannot handle the variadic version of BOOST_PP_TUPLE_REM(size)
*/
-# if BOOST_PP_VARIADICS && !(BOOST_PP_VARIADICS_MSVC && _MSC_VER == 1400)
+# if BOOST_PP_VARIADICS && !(BOOST_PP_VARIADICS_MSVC && _MSC_VER <= 1400)
+# if BOOST_PP_VARIADICS_MSVC
+ /* To be used internally when the size could be 0 ( or 1 ) */
+# define BOOST_PP_TUPLE_REM_CAT(size) BOOST_PP_REM_CAT
+# endif
# define BOOST_PP_TUPLE_REM(size) BOOST_PP_REM
# else
# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
@@ -113,11 +123,12 @@
# if BOOST_PP_VARIADICS_MSVC
# define BOOST_PP_TUPLE_REM_CTOR(...) BOOST_PP_TUPLE_REM_CTOR_I(BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_REM_CTOR_O_, __VA_ARGS__), (__VA_ARGS__))
# define BOOST_PP_TUPLE_REM_CTOR_I(m, args) BOOST_PP_TUPLE_REM_CTOR_II(m, args)
-# define BOOST_PP_TUPLE_REM_CTOR_II(m, args) BOOST_PP_CAT(m ## args,)
+# define BOOST_PP_TUPLE_REM_CTOR_II(m, args) BOOST_PP_CAT(BOOST_PP_EXPAND(m ## args),)
+# define BOOST_PP_TUPLE_REM_CTOR_O_1(tuple) BOOST_PP_TUPLE_IS_SINGLE_RETURN(BOOST_PP_REM_CAT,BOOST_PP_REM,tuple) tuple
# else
# define BOOST_PP_TUPLE_REM_CTOR(...) BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_REM_CTOR_O_, __VA_ARGS__)(__VA_ARGS__)
+# define BOOST_PP_TUPLE_REM_CTOR_O_1(tuple) BOOST_PP_REM tuple
# endif
-# define BOOST_PP_TUPLE_REM_CTOR_O_1(tuple) BOOST_PP_REM tuple
# define BOOST_PP_TUPLE_REM_CTOR_O_2(size, tuple) BOOST_PP_TUPLE_REM_CTOR_O_1(tuple)
# else
# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
diff --git a/include/boost/preprocessor/tuple/to_seq.hpp b/include/boost/preprocessor/tuple/to_seq.hpp
index 8bd8485..a53f5a0 100644
--- a/include/boost/preprocessor/tuple/to_seq.hpp
+++ b/include/boost/preprocessor/tuple/to_seq.hpp
@@ -48,6 +48,9 @@
# endif
# endif
#
+/* An empty array can be passed */
+# define BOOST_PP_TUPLE_TO_SEQ_0() ()
+#
# define BOOST_PP_TUPLE_TO_SEQ_1(e0) (e0)
# define BOOST_PP_TUPLE_TO_SEQ_2(e0, e1) (e0)(e1)
# define BOOST_PP_TUPLE_TO_SEQ_3(e0, e1, e2) (e0)(e1)(e2)
diff --git a/include/boost/preprocessor/variadic/detail/is_single_return.hpp b/include/boost/preprocessor/variadic/detail/is_single_return.hpp
new file mode 100644
index 0000000..5c95029
--- /dev/null
+++ b/include/boost/preprocessor/variadic/detail/is_single_return.hpp
@@ -0,0 +1,28 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Edward Diener 2014. *
+# * Distributed under the Boost Software License, Version 1.0. (See *
+# * accompanying file LICENSE_1_0.txt or copy at *
+# * http://www.boost.org/LICENSE_1_0.txt) *
+# * *
+# ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_VARIADIC_DETAIL_IS_SINGLE_RETURN_HPP
+# define BOOST_PREPROCESSOR_VARIADIC_DETAIL_IS_SINGLE_RETURN_HPP
+#
+# include
+#
+# /* BOOST_PP_VARIADIC_IS_SINGLE_RETURN */
+#
+# if BOOST_PP_VARIADICS && BOOST_PP_VARIADICS_MSVC
+# include
+# include
+# include
+# define BOOST_PP_VARIADIC_IS_SINGLE_RETURN(sr,nsr,...) \
+ BOOST_PP_IIF(BOOST_PP_IS_1(BOOST_PP_VARIADIC_SIZE(__VA_ARGS__)),sr,nsr) \
+ /**/
+# endif /* BOOST_PP_VARIADICS && BOOST_PP_VARIADICS_MSVC */
+#
+# endif /* BOOST_PREPROCESSOR_VARIADIC_DETAIL_IS_SINGLE_RETURN_HPP */
diff --git a/meta/libraries.json b/meta/libraries.json
new file mode 100644
index 0000000..279c68f
--- /dev/null
+++ b/meta/libraries.json
@@ -0,0 +1,15 @@
+{
+ "key": "preprocessor",
+ "name": "Preprocessor",
+ "authors": [
+ "Vesa Karvonen",
+ "Paul Mensonides"
+ ],
+ "description": "Preprocessor metaprogramming tools including repetition and recursion.",
+ "category": [
+ "Preprocessor"
+ ],
+ "maintainers": [
+ "Paul Mensonides "
+ ]
+}
diff --git a/test/Jamfile.v2 b/test/Jamfile.v2
index 92d1716..100df3b 100644
--- a/test/Jamfile.v2
+++ b/test/Jamfile.v2
@@ -19,21 +19,22 @@ project preprocessor_tests : requirements on
test-suite preprocessor
:
- [ compile arithmetic.cpp ]
- [ compile array.cpp ]
- [ compile comparison.cpp ]
- [ compile control.cpp ]
- [ compile debug.cpp ]
- [ compile facilities.cpp ]
- [ compile iteration.cpp ]
- [ compile list.cpp ]
- [ compile logical.cpp ]
- [ compile repetition.cpp ]
- [ compile selection.cpp ]
- [ compile seq.cpp ]
- [ compile slot.cpp ]
- [ compile tuple.cpp ]
- [ compile variadic.cpp ]
+ [ compile arithmetic.cpp : gcc:-std=c++0x clang:-std=c++0x ]
+ [ compile array.cpp : gcc:-std=c++0x clang:-std=c++0x ]
+ [ compile comparison.cpp : gcc:-std=c++0x clang:-std=c++0x ]
+ [ compile control.cpp : gcc:-std=c++0x clang:-std=c++0x ]
+ [ compile debug.cpp : gcc:-std=c++0x clang:-std=c++0x ]
+ [ compile facilities.cpp : gcc:-std=c++0x clang:-std=c++0x ]
+ [ compile iteration.cpp : gcc:-std=c++0x clang:-std=c++0x ]
+ [ compile list.cpp : gcc:-std=c++0x clang:-std=c++0x ]
+ [ compile logical.cpp : gcc:-std=c++0x clang:-std=c++0x ]
+ [ compile punctuation.cpp : gcc:-std=c++0x clang:-std=c++0x ]
+ [ compile repetition.cpp : gcc:-std=c++0x clang:-std=c++0x ]
+ [ compile selection.cpp : gcc:-std=c++0x clang:-std=c++0x ]
+ [ compile seq.cpp : gcc:-std=c++0x clang:-std=c++0x ]
+ [ compile slot.cpp : gcc:-std=c++0x clang:-std=c++0x ]
+ [ compile tuple.cpp : gcc:-std=c++0x clang:-std=c++0x ]
+ [ compile variadic.cpp : gcc:-std=c++0x clang:-std=c++0x ]
;
test-suite preprocessor_nvm
@@ -57,55 +58,59 @@ test-suite preprocessor_nvm
test-suite preprocessor_c
:
[ compile arithmetic.c
- : gcc:-std=c99
+ : gcc:-std=c99 clang:-std=c99
: arithmetic_c
]
[ compile array.c
- : gcc:-std=c99
+ : gcc:-std=c99 clang:-std=c99
: array_c
]
[ compile comparison.c
- : gcc:-std=c99
+ : gcc:-std=c99 clang:-std=c99
: comparison_c
]
[ compile control.c
- : gcc:-std=c99
+ : gcc:-std=c99 clang:-std=c99
: control_c
]
[ compile debug.c
- : gcc:-std=c99
+ : gcc:-std=c99 clang:-std=c99
: debug_c
]
[ compile facilities.c
- : gcc:-std=c99
+ : gcc:-std=c99 clang:-std=c99
: facilities_c
]
[ compile list.c
- : gcc:-std=c99
+ : gcc:-std=c99 clang:-std=c99
: list_c
]
[ compile logical.c
- : gcc:-std=c99
+ : gcc:-std=c99 clang:-std=c99
: logical_c
]
+ [ compile punctuation.c
+ : gcc:-std=c99 clang:-std=c99
+ : punctuation_c
+ ]
[ compile selection.c
- : gcc:-std=c99
+ : gcc:-std=c99 clang:-std=c99
: selection_c
]
[ compile seq.c
- : gcc:-std=c99
+ : gcc:-std=c99 clang:-std=c99
: seq_c
]
[ compile slot.c
- : gcc:-std=c99
+ : gcc:-std=c99 clang:-std=c99
: slot_c
]
[ compile tuple.c
- : gcc:-std=c99
+ : gcc:-std=c99 clang:-std=c99
: tuple_c
]
[ compile variadic.c
- : gcc:-std=c99
+ : gcc:-std=c99 clang:-std=c99
: variadic_c
]
;
@@ -114,62 +119,99 @@ test-suite preprocessor_c_nvm
:
[ compile arithmetic.c
: BOOST_PP_VARIADICS=0
- gcc:-std=c99
+ gcc:-std=c99 clang: