diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..7df0277 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,39 @@ +# Copyright 2016 Edward Diener +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt) + +language: cpp + +sudo: false + +python: "2.7" + +os: + - linux + - osx + +branches: + only: + - master + - develop + +install: + - cd .. + - git clone -b $TRAVIS_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root + - cd boost-root + - git submodule update --init --depth 1 tools/build + - git submodule update --init --depth 1 libs/config + - git submodule update --init --depth 1 tools/boostdep + - cp -r $TRAVIS_BUILD_DIR/* libs/preprocessor + - python tools/boostdep/depinst/depinst.py preprocessor + - ./bootstrap.sh + - ./b2 headers + +script: + - TOOLSET=gcc,clang + - if [ $TRAVIS_OS_NAME == osx ]; then TOOLSET=clang; fi + - ./b2 libs/preprocessor/test toolset=$TOOLSET + +notifications: + email: + on_success: always diff --git a/include/boost/preprocessor/cat.hpp b/include/boost/preprocessor/cat.hpp index 5e52850..52a3892 100644 --- a/include/boost/preprocessor/cat.hpp +++ b/include/boost/preprocessor/cat.hpp @@ -25,7 +25,7 @@ # define BOOST_PP_CAT_OO(par) BOOST_PP_CAT_I ## par # endif # -# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC() +# if (~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()) || (defined(__INTEL_COMPILER) && __INTEL_COMPILER >= 1700) # define BOOST_PP_CAT_I(a, b) a ## b # else # define BOOST_PP_CAT_I(a, b) BOOST_PP_CAT_II(~, a ## b) diff --git a/include/boost/preprocessor/config/config.hpp b/include/boost/preprocessor/config/config.hpp index 8be0e47..4801903 100644 --- a/include/boost/preprocessor/config/config.hpp +++ b/include/boost/preprocessor/config/config.hpp @@ -32,7 +32,7 @@ # elif defined(__MWERKS__) && __MWERKS__ >= 0x3200 # define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_STRICT()) # elif defined(__EDG__) || defined(__EDG_VERSION__) -# if defined(_MSC_VER) && (defined(__INTELLISENSE__) || __EDG_VERSION__ >= 308) +# if defined(_MSC_VER) && (defined(__clang__) || defined(__INTELLISENSE__) || __EDG_VERSION__ >= 308) # define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_MSVC()) # else # define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_EDG() | BOOST_PP_CONFIG_STRICT()) @@ -45,7 +45,7 @@ # define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_STRICT()) # elif defined(__BORLANDC__) || defined(__IBMC__) || defined(__IBMCPP__) || defined(__SUNPRO_CC) # define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_BCC()) -# elif defined(_MSC_VER) && !defined(__clang__) +# elif defined(_MSC_VER) # define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_MSVC()) # else # define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_STRICT()) @@ -75,8 +75,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 && __SUNPRO_CC < 0x5120 ) || defined __HP_aCC && !defined __EDG__ || defined __MRC__ || defined __SC__ || defined __IBMCPP__ || defined __PGI # define BOOST_PP_VARIADICS 0 -# /* VC++ (C/C++) */ -# elif defined _MSC_VER && _MSC_VER >= 1400 && (!defined __EDG__ || defined(__INTELLISENSE__)) && !defined __clang__ +# /* VC++ (C/C++) and Intel C++ Compiler >= 17.0 with MSVC */ +# elif defined _MSC_VER && _MSC_VER >= 1400 && (defined(__clang__) || !defined __EDG__ || defined(__INTELLISENSE__) || defined(__INTEL_COMPILER) && __INTEL_COMPILER >= 1700) # define BOOST_PP_VARIADICS 1 # undef BOOST_PP_VARIADICS_MSVC # define BOOST_PP_VARIADICS_MSVC 1 @@ -92,7 +92,7 @@ # elif !BOOST_PP_VARIADICS + 1 < 2 # undef BOOST_PP_VARIADICS # define BOOST_PP_VARIADICS 1 -# if defined _MSC_VER && _MSC_VER >= 1400 && (defined(__INTELLISENSE__) || !(defined __EDG__ || defined __GCCXML__ || defined __CUDACC__ || defined __PATHSCALE__ || defined __clang__ || defined __DMC__ || defined __CODEGEARC__ || defined __BORLANDC__ || defined __MWERKS__ || defined __SUNPRO_CC || defined __HP_aCC || defined __MRC__ || defined __SC__ || defined __IBMCPP__ || defined __PGI)) +# if defined _MSC_VER && _MSC_VER >= 1400 && (defined(__clang__) || defined(__INTELLISENSE__) || (defined(__INTEL_COMPILER) && __INTEL_COMPILER >= 1700) || !(defined __EDG__ || defined __GCCXML__ || defined __CUDACC__ || defined __PATHSCALE__ || defined __DMC__ || defined __CODEGEARC__ || defined __BORLANDC__ || defined __MWERKS__ || defined __SUNPRO_CC || defined __HP_aCC || defined __MRC__ || defined __SC__ || defined __IBMCPP__ || defined __PGI)) # undef BOOST_PP_VARIADICS_MSVC # define BOOST_PP_VARIADICS_MSVC 1 # endif diff --git a/include/boost/preprocessor/seq/detail/binary_transform.hpp b/include/boost/preprocessor/seq/detail/binary_transform.hpp index 70897b0..08b5f9d 100644 --- a/include/boost/preprocessor/seq/detail/binary_transform.hpp +++ b/include/boost/preprocessor/seq/detail/binary_transform.hpp @@ -30,14 +30,13 @@ # endif # if BOOST_PP_VARIADICS # 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__) \ - /**/ +# define BOOST_PP_SEQ_BINARY_TRANSFORM_REM(data) data +# define BOOST_PP_SEQ_BINARY_TRANSFORM_A(...) (BOOST_PP_SEQ_BINARY_TRANSFORM_REM, __VA_ARGS__)() BOOST_PP_SEQ_BINARY_TRANSFORM_B +# define BOOST_PP_SEQ_BINARY_TRANSFORM_B(...) (BOOST_PP_SEQ_BINARY_TRANSFORM_REM, __VA_ARGS__)() BOOST_PP_SEQ_BINARY_TRANSFORM_A # else -# define BOOST_PP_SEQ_BINARY_TRANSFORM_GET_REM(...) BOOST_PP_REM +# 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 # 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/detail/to_list_msvc.hpp b/include/boost/preprocessor/seq/detail/to_list_msvc.hpp new file mode 100644 index 0000000..2599c00 --- /dev/null +++ b/include/boost/preprocessor/seq/detail/to_list_msvc.hpp @@ -0,0 +1,55 @@ +# /* ************************************************************************** +# * * +# * (C) Copyright Edward Diener 2016. * +# * 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_SEQ_DETAIL_TO_LIST_MSVC_HPP +# define BOOST_PREPROCESSOR_SEQ_DETAIL_TO_LIST_MSVC_HPP +# +# include +# +# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC() +# +# include +# include +# include +# include +# +# define BOOST_PP_SEQ_DETAIL_TO_LIST_MSVC_STATE_RESULT(state) \ + BOOST_PP_TUPLE_ELEM(2, 0, state) \ +/**/ +# define BOOST_PP_SEQ_DETAIL_TO_LIST_MSVC_STATE_SIZE(state) \ + BOOST_PP_TUPLE_ELEM(2, 1, state) \ +/**/ +# define BOOST_PP_SEQ_DETAIL_TO_LIST_MSVC_PRED(d,state) \ + BOOST_PP_SEQ_DETAIL_TO_LIST_MSVC_STATE_SIZE(state) \ +/**/ +# define BOOST_PP_SEQ_DETAIL_TO_LIST_MSVC_OP(d,state) \ + ( \ + BOOST_PP_CAT(BOOST_PP_SEQ_DETAIL_TO_LIST_MSVC_STATE_RESULT(state),), \ + BOOST_PP_DEC(BOOST_PP_SEQ_DETAIL_TO_LIST_MSVC_STATE_SIZE(state)) \ + ) \ +/**/ +# +# /* BOOST_PP_SEQ_DETAIL_TO_LIST_MSVC */ +# +# define BOOST_PP_SEQ_DETAIL_TO_LIST_MSVC(result,seqsize) \ + BOOST_PP_SEQ_DETAIL_TO_LIST_MSVC_STATE_RESULT \ + ( \ + BOOST_PP_WHILE \ + ( \ + BOOST_PP_SEQ_DETAIL_TO_LIST_MSVC_PRED, \ + BOOST_PP_SEQ_DETAIL_TO_LIST_MSVC_OP, \ + (result,seqsize) \ + ) \ + ) \ +/**/ +# endif // BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC() +# +# endif // BOOST_PREPROCESSOR_SEQ_DETAIL_TO_LIST_MSVC_HPP diff --git a/include/boost/preprocessor/seq/to_list.hpp b/include/boost/preprocessor/seq/to_list.hpp index fa0421b..ed8948d 100644 --- a/include/boost/preprocessor/seq/to_list.hpp +++ b/include/boost/preprocessor/seq/to_list.hpp @@ -19,7 +19,19 @@ # # /* BOOST_PP_SEQ_TO_LIST */ # +# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC() +# include +# include +# define BOOST_PP_SEQ_TO_LIST(seq) \ + BOOST_PP_SEQ_DETAIL_TO_LIST_MSVC \ + ( \ + BOOST_PP_SEQ_TO_LIST_I(BOOST_PP_SEQ_BINARY_TRANSFORM(seq)), \ + BOOST_PP_SEQ_SIZE(seq) \ + ) \ +/**/ +# else # define BOOST_PP_SEQ_TO_LIST(seq) BOOST_PP_SEQ_TO_LIST_I(BOOST_PP_SEQ_BINARY_TRANSFORM(seq)) +# endif # define BOOST_PP_SEQ_TO_LIST_I(bseq) BOOST_PP_SEQ_TO_LIST_A bseq BOOST_PP_NIL BOOST_PP_SEQ_TO_LIST_B bseq # define BOOST_PP_SEQ_TO_LIST_A(m, e) m(BOOST_PP_LPAREN() e BOOST_PP_COMMA() BOOST_PP_SEQ_TO_LIST_A_ID) # define BOOST_PP_SEQ_TO_LIST_A_ID() BOOST_PP_SEQ_TO_LIST_A diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 100df3b..7ac4ad9 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -19,22 +19,22 @@ project preprocessor_tests : requirements on test-suite preprocessor : - [ 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 ] + [ compile arithmetic.cpp : gcc:-std=c++0x clang-linux:-std=c++0x ] + [ compile array.cpp : gcc:-std=c++0x clang-linux:-std=c++0x ] + [ compile comparison.cpp : gcc:-std=c++0x clang-linux:-std=c++0x ] + [ compile control.cpp : gcc:-std=c++0x clang-linux:-std=c++0x ] + [ compile debug.cpp : gcc:-std=c++0x clang-linux:-std=c++0x ] + [ compile facilities.cpp : gcc:-std=c++0x clang-linux:-std=c++0x ] + [ compile iteration.cpp : gcc:-std=c++0x clang-linux:-std=c++0x ] + [ compile list.cpp : gcc:-std=c++0x clang-linux:-std=c++0x ] + [ compile logical.cpp : gcc:-std=c++0x clang-linux:-std=c++0x ] + [ compile punctuation.cpp : gcc:-std=c++0x clang-linux:-std=c++0x ] + [ compile repetition.cpp : gcc:-std=c++0x clang-linux:-std=c++0x ] + [ compile selection.cpp : gcc:-std=c++0x clang-linux:-std=c++0x ] + [ compile seq.cpp : gcc:-std=c++0x clang-linux:-std=c++0x ] + [ compile slot.cpp : gcc:-std=c++0x clang-linux:-std=c++0x ] + [ compile tuple.cpp : gcc:-std=c++0x clang-linux:-std=c++0x ] + [ compile variadic.cpp : gcc:-std=c++0x clang-linux:-std=c++0x ] ; test-suite preprocessor_nvm @@ -58,59 +58,59 @@ test-suite preprocessor_nvm test-suite preprocessor_c : [ compile arithmetic.c - : gcc:-std=c99 clang:-std=c99 + : gcc:-std=c99 clang-linux:-std=c99 : arithmetic_c ] [ compile array.c - : gcc:-std=c99 clang:-std=c99 + : gcc:-std=c99 clang-linux:-std=c99 : array_c ] [ compile comparison.c - : gcc:-std=c99 clang:-std=c99 + : gcc:-std=c99 clang-linux:-std=c99 : comparison_c ] [ compile control.c - : gcc:-std=c99 clang:-std=c99 + : gcc:-std=c99 clang-linux:-std=c99 : control_c ] [ compile debug.c - : gcc:-std=c99 clang:-std=c99 + : gcc:-std=c99 clang-linux:-std=c99 : debug_c ] [ compile facilities.c - : gcc:-std=c99 clang:-std=c99 + : gcc:-std=c99 clang-linux:-std=c99 : facilities_c ] [ compile list.c - : gcc:-std=c99 clang:-std=c99 + : gcc:-std=c99 clang-linux:-std=c99 : list_c ] [ compile logical.c - : gcc:-std=c99 clang:-std=c99 + : gcc:-std=c99 clang-linux:-std=c99 : logical_c ] [ compile punctuation.c - : gcc:-std=c99 clang:-std=c99 + : gcc:-std=c99 clang-linux:-std=c99 : punctuation_c ] [ compile selection.c - : gcc:-std=c99 clang:-std=c99 + : gcc:-std=c99 clang-linux:-std=c99 : selection_c ] [ compile seq.c - : gcc:-std=c99 clang:-std=c99 + : gcc:-std=c99 clang-linux:-std=c99 : seq_c ] [ compile slot.c - : gcc:-std=c99 clang:-std=c99 + : gcc:-std=c99 clang-linux:-std=c99 : slot_c ] [ compile tuple.c - : gcc:-std=c99 clang:-std=c99 + : gcc:-std=c99 clang-linux:-std=c99 : tuple_c ] [ compile variadic.c - : gcc:-std=c99 clang:-std=c99 + : gcc:-std=c99 clang-linux:-std=c99 : variadic_c ] ; @@ -119,71 +119,71 @@ test-suite preprocessor_c_nvm : [ compile arithmetic.c : BOOST_PP_VARIADICS=0 - gcc:-std=c99 clang:-std=c99 + gcc:-std=c99 clang-linux:-std=c99 : arithmetic_c_nvm ] [ compile array.c : BOOST_PP_VARIADICS=0 - gcc:-std=c99 clang:-std=c99 + gcc:-std=c99 clang-linux:-std=c99 : array_c_nvm ] [ compile comparison.c : BOOST_PP_VARIADICS=0 - gcc:-std=c99 clang:-std=c99 + gcc:-std=c99 clang-linux:-std=c99 : comparison_c_nvm ] [ compile control.c : BOOST_PP_VARIADICS=0 - gcc:-std=c99 clang:-std=c99 + gcc:-std=c99 clang-linux:-std=c99 : control_c_nvm ] [ compile debug.c : BOOST_PP_VARIADICS=0 - gcc:-std=c99 clang:-std=c99 + gcc:-std=c99 clang-linux:-std=c99 : debug_c_nvm ] [ compile facilities.c : BOOST_PP_VARIADICS=0 - gcc:-std=c99 clang:-std=c99 + gcc:-std=c99 clang-linux:-std=c99 : facilities_c_nvm ] [ compile list.c : BOOST_PP_VARIADICS=0 - gcc:-std=c99 clang:-std=c99 + gcc:-std=c99 clang-linux:-std=c99 : list_c_nvm ] [ compile logical.c : BOOST_PP_VARIADICS=0 - gcc:-std=c99 clang:-std=c99 + gcc:-std=c99 clang-linux:-std=c99 : logical_c_nvm ] [ compile selection.c : BOOST_PP_VARIADICS=0 - gcc:-std=c99 clang:-std=c99 + gcc:-std=c99 clang-linux:-std=c99 : selection_c_nvm ] [ compile seq.c : BOOST_PP_VARIADICS=0 - gcc:-std=c99 clang:-std=c99 + gcc:-std=c99 clang-linux:-std=c99 : seq_c_nvm ] [ compile slot.c : BOOST_PP_VARIADICS=0 - gcc:-std=c99 clang:-std=c99 + gcc:-std=c99 clang-linux:-std=c99 : slot_c_nvm ] [ compile tuple.c : BOOST_PP_VARIADICS=0 - gcc:-std=c99 clang:-std=c99 + gcc:-std=c99 clang-linux:-std=c99 : tuple_c_nvm ] ; test-suite preprocessor_isempty : - [ compile isempty.cpp : gcc:-std=c++0x clang:-std=c++0x ] - [ compile-fail isempty_variadic_standard_failure.cpp : gcc:-std=c++0x clang:-std=c++0x ] - [ compile-fail isempty_variadic_standard_failure2.cpp : gcc:-std=c++0x clang:-std=c++0x ] + [ compile isempty.cpp : gcc:-std=c++0x clang-linux:-std=c++0x ] + [ compile-fail isempty_variadic_standard_failure.cpp : gcc:-std=c++0x clang-linux:-std=c++0x ] + [ compile-fail isempty_variadic_standard_failure2.cpp : gcc:-std=c++0x clang-linux:-std=c++0x ] ; test-suite preprocessor_isempty_nvm @@ -194,15 +194,15 @@ test-suite preprocessor_isempty_nvm test-suite preprocessor_isempty_c : [ compile isempty.c - : gcc:-std=c99 clang:-std=c99 + : gcc:-std=c99 clang-linux:-std=c99 : isempty_c ] [ compile-fail isempty_variadic_standard_failure.c - : gcc:-std=c99 clang:-std=c99 + : gcc:-std=c99 clang-linux:-std=c99 : isempty_variadic_standard_failure_c ] [ compile-fail isempty_variadic_standard_failure2.c - : gcc:-std=c99 clang:-std=c99 + : gcc:-std=c99 clang-linux:-std=c99 : isempty_variadic_standard_failure2_c ] ; @@ -211,7 +211,12 @@ test-suite preprocessor_isempty_c_nvm : [ compile isempty.c : BOOST_PP_VARIADICS=0 - gcc:-std=c99 clang:-std=c99 + gcc:-std=c99 clang-linux:-std=c99 : isempty_c_nvm ] ; + +test-suite preprocessor_config + : + [ run config_info.cpp ] + ; diff --git a/test/config_info.cpp b/test/config_info.cpp new file mode 100644 index 0000000..ce92887 --- /dev/null +++ b/test/config_info.cpp @@ -0,0 +1,93 @@ +#include +#include +#include +#include + +static unsigned int indent = 4; +static unsigned int width = 40; + +using std::cout; +using std::istream; + +void print_separator() +{ + std::cout << +"\n\n*********************************************************************\n\n"; +} + +void print_macro(const char* name, const char* value) +{ + // if name == value+1 then then macro is not defined, + // in which case we don't print anything: + if(0 != strcmp(name, value+1)) + { + for(unsigned i = 0; i < indent; ++i) std::cout.put(' '); + std::cout << std::setw(width); + cout.setf(istream::left, istream::adjustfield); + std::cout << name; + if(value[1]) + { + // macro has a value: + std::cout << value << "\n"; + } + else + { + // macro is defined but has no value: + std::cout << " [no value]\n"; + } + } +} + +#define PRINT_MACRO(X) print_macro(#X, BOOST_PP_STRINGIZE(=X)) + +void print_macros() +{ + + print_separator(); + + PRINT_MACRO(__GCCXML__); + PRINT_MACRO(__WAVE__); + PRINT_MACRO(__MWERKS__); + PRINT_MACRO(__EDG__); + PRINT_MACRO(_MSC_VER); + PRINT_MACRO(__clang__); + PRINT_MACRO(__DMC__); + PRINT_MACRO(__BORLANDC__); + PRINT_MACRO(__IBMC__); + PRINT_MACRO(__IBMCPP__); + PRINT_MACRO(__SUNPRO_CC); + PRINT_MACRO(__CUDACC__); + PRINT_MACRO(__PATHSCALE__); + PRINT_MACRO(__CODEGEARC__); + PRINT_MACRO(__HP_aCC); + PRINT_MACRO(__SC__); + PRINT_MACRO(__MRC__); + PRINT_MACRO(__PGI); + PRINT_MACRO(__INTEL_COMPILER); + PRINT_MACRO(__GNUC__); + PRINT_MACRO(__GXX_EXPERIMENTAL_CXX0X__); + + print_separator(); + + PRINT_MACRO(__cplusplus); + PRINT_MACRO(__STDC_VERSION__); + PRINT_MACRO(__EDG_VERSION__); + PRINT_MACRO(__INTELLISENSE__); + PRINT_MACRO(__WAVE_HAS_VARIADICS__); + + print_separator(); + + PRINT_MACRO(BOOST_PP_CONFIG_ERRORS); + PRINT_MACRO(BOOST_PP_CONFIG_EXTENDED_LINE_INFO); + PRINT_MACRO(BOOST_PP_CONFIG_FLAGS()); + PRINT_MACRO(BOOST_PP_VARIADICS); + PRINT_MACRO(BOOST_PP_VARIADICS_MSVC); +} + +int main() +{ + + print_macros(); + + return 0; +}