Fwd: [boost] [clang] clang-cl expansion of macros

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Fwd: [boost] [clang] clang-cl expansion of macros

Boost - Users mailing list


On 16 April 2016 at 17:58, Edward Diener <[hidden email]> wrote:
What I strongly suspect will finally happen is that clang will not fix these emulation problems because they are too tricky and numerous to do. Instead they will probably declare that their emulation is good enough for the majority of preprocessor constructs and that Boost PP, which pushes the preprocessor to its limits, is not meant to work with their flawed VC++ emulation. I hope I am wrong about that supposition, but having spent much time in Boost PP and Boost VMD trying to workaround VC++ non-standard preprocessor behavior I can envision that having to code "down" to that behavior in numerous complicated instances will be too much time consuming work for the clang developers who have chosen to work with VC++ preprocessor emulation.


I've successfully built boost-1.64 with VC1410 (from the developer command prompt). Trying to use boost with a project using Clang 4.0.0 (both the LLVM and C2 backends) gives me the following PP error messages:


1>------ Rebuild All started: Project: test, Configuration: Debug x64 ------
1>  In file included from test.cpp:16:
1>  In file included from z:\vc\x64\include\boost/filesystem.hpp:16:
1>  In file included from z:\vc\x64\include\boost/filesystem/path.hpp:28:
1>  In file included from z:\vc\x64\include\boost/iterator/iterator_facade.hpp:12:
1>  In file included from z:\vc\x64\include\boost/iterator/interoperable.hpp:11:
1>  In file included from z:\vc\x64\include\boost/mpl/or.hpp:43:
1>  In file included from z:\vc\x64\include\boost/mpl/aux_/include_preprocessed.hpp:37:
1>z:\vc\x64\include\boost/mpl/aux_/preprocessed/plain/or.hpp(59,7): error : too many arguments provided to function-like macro invocation
1>        2
1>        ^
1>  z:\vc\x64\include\boost/preprocessor/facilities/expand.hpp(26,10):  note: macro 'BOOST_PP_EXPAND_I' defined here
1>  # define BOOST_PP_EXPAND_I(x) x
1>           ^
1>  In file included from test.cpp:16:
1>  In file included from z:\vc\x64\include\boost/filesystem.hpp:16:
1>  In file included from z:\vc\x64\include\boost/filesystem/path.hpp:28:
1>  In file included from z:\vc\x64\include\boost/iterator/iterator_facade.hpp:12:
1>  In file included from z:\vc\x64\include\boost/iterator/interoperable.hpp:11:
1>  In file included from z:\vc\x64\include\boost/mpl/or.hpp:43:
1>  In file included from z:\vc\x64\include\boost/mpl/aux_/include_preprocessed.hpp:37:
1>z:\vc\x64\include\boost/mpl/aux_/preprocessed/plain/or.hpp(58,1): error : expected a qualified name after 'typename'
1>  BOOST_MPL_AUX_NA_SPEC2(
1>  ^
1>  z:\vc\x64\include\boost/mpl/aux_/na_spec.hpp(166,44):  note: expanded from macro 'BOOST_MPL_AUX_NA_SPEC2'
1>  #define BOOST_MPL_AUX_NA_SPEC2(i, j, name) \
1>                                             ^
1>  z:\vc\x64\include\boost/mpl/aux_/na_spec.hpp(64,11):  note: expanded from macro '\
1>
1>  BOOST_MPL_AUX_NA_SPEC_MAIN'
1>            BOOST_MPL_PP_PARAMS(i, typename T) \
1>            ^
1>  z:\vc\x64\include\boost/mpl/aux_/preprocessor/params.hpp(58,11):  note: expanded from macro 'BOOST_MPL_PP_PARAMS'
1>          , BOOST_MPL_PP_AUX_PARAM_FUNC \
1>            ^
1>  In file included from test.cpp:16:
1>  In file included from z:\vc\x64\include\boost/filesystem.hpp:16:
1>  In file included from z:\vc\x64\include\boost/filesystem/path.hpp:28:
1>  In file included from z:\vc\x64\include\boost/iterator/iterator_facade.hpp:12:
1>  In file included from z:\vc\x64\include\boost/iterator/interoperable.hpp:11:
1>  In file included from z:\vc\x64\include\boost/mpl/or.hpp:43:
1>  In file included from z:\vc\x64\include\boost/mpl/aux_/include_preprocessed.hpp:37:
1>z:\vc\x64\include\boost/mpl/aux_/preprocessed/plain/or.hpp(58,1): error : expected ',' or '>' in template-parameter-list
1>  z:\vc\x64\include\boost/mpl/aux_/na_spec.hpp(166,44):  note: expanded from macro 'BOOST_MPL_AUX_NA_SPEC2'
1>  #define BOOST_MPL_AUX_NA_SPEC2(i, j, name) \
1>                                             ^
1>  z:\vc\x64\include\boost/mpl/aux_/na_spec.hpp(65,9):  note: expanded from macro '\
1>
1>  BOOST_MPL_AUX_NA_SPEC_MAIN'
1>          BOOST_MPL_PP_NESTED_DEF_PARAMS_TAIL(i, typename T, na) \
1>          ^
1>  z:\vc\x64\include\boost/mpl/aux_/preprocessor/def_params_tail.hpp(97,5):  note: expanded from macro 'BOOST_MPL_PP_NESTED_DEF_PARAMS_TAIL'
1>      BOOST_MPL_PP_DEF_PARAMS_TAIL_IMPL(i, param, BOOST_PP_IDENTITY(=value)) \
1>      ^
1>  note: (skipping 2 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)
1>  z:\vc\x64\include\boost/preprocessor/cat.hpp(22,32):  note: expanded from macro 'BOOST_PP_CAT'
1>  #    define BOOST_PP_CAT(a, b) BOOST_PP_CAT_I(a, b)
1>                                 ^
1>  z:\vc\x64\include\boost/preprocessor/cat.hpp(31,53):  note: expanded from macro 'BOOST_PP_CAT_I'
1>  #    define BOOST_PP_CAT_I(a, b) BOOST_PP_CAT_II(~, a ## b)
1>                                                      ^
1>  <scratch space>(8,1):  note: expanded from here
1>  BOOST_PP_REPEAT_1
1>  ^
1>  In file included from test.cpp:16:
1>  In file included from z:\vc\x64\include\boost/filesystem.hpp:16:
1>  In file included from z:\vc\x64\include\boost/filesystem/path.hpp:28:
1>  In file included from z:\vc\x64\include\boost/iterator/iterator_facade.hpp:12:
1>  In file included from z:\vc\x64\include\boost/iterator/interoperable.hpp:11:
1>  In file included from z:\vc\x64\include\boost/mpl/or.hpp:43:
1>  In file included from z:\vc\x64\include\boost/mpl/aux_/include_preprocessed.hpp:37:
1>z:\vc\x64\include\boost/mpl/aux_/preprocessed/plain/or.hpp(58,1): error : template argument for template type parameter must be a type
1>  BOOST_MPL_AUX_NA_SPEC2(
1>  ^~~~~~~~~~~~~~~~~~~~~~~
1>  z:\vc\x64\include\boost/mpl/aux_/na_spec.hpp(166,44):  note: expanded from macro 'BOOST_MPL_AUX_NA_SPEC2'
1>  #define BOOST_MPL_AUX_NA_SPEC2(i, j, name) \
1>                                             ^
1>  z:\vc\x64\include\boost/mpl/aux_/na_spec.hpp(68,17):  note: expanded from macro '\
1>
1>  BOOST_MPL_AUX_NA_SPEC_MAIN'
1>          : name< BOOST_MPL_PP_PARAMS(i, T) > \
1>                  ^~~~~~~~~~~~~~~~~~~~~~~~~
1>  z:\vc\x64\include\boost/mpl/aux_/preprocessor/params.hpp(58,11):  note: expanded from macro 'BOOST_MPL_PP_PARAMS'
1>          , BOOST_MPL_PP_AUX_PARAM_FUNC \
1>          ~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1>  note: (skipping 5 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)
1>  z:\vc\x64\include\boost/preprocessor/cat.hpp(31,53):  note: expanded from macro 'BOOST_PP_CAT_I'
1>  #    define BOOST_PP_CAT_I(a, b) BOOST_PP_CAT_II(~, a ## b)
1>                                                      ^~~~~~
1>  <scratch space>(33,1):  note: expanded from here
1>  T2
1>  ^~
1>  z:\vc\x64\include\boost/preprocessor/cat.hpp(32,37):  note: expanded from macro 'BOOST_PP_CAT_II'
1>  #    define BOOST_PP_CAT_II(p, res) res
1>                                      ^~~
1>  z:\vc\x64\include\boost/mpl/aux_/preprocessed/plain/or.hpp(45,39):  note: template parameter is declared here
1>      , typename BOOST_MPL_AUX_NA_PARAM(T2)
1>                                        ^
1>  In file included from test.cpp:16:
1>  In file included from z:\vc\x64\include\boost/filesystem.hpp:16:
1>  In file included from z:\vc\x64\include\boost/filesystem/path.hpp:28:
1>  In file included from z:\vc\x64\include\boost/iterator/iterator_facade.hpp:14:
1>  In file included from z:\vc\x64\include\boost/iterator/iterator_categories.hpp:15:
1>  In file included from z:\vc\x64\include\boost/mpl/eval_if.hpp:17:
1>z:\vc\x64\include\boost/mpl/if.hpp(131,23): error : too many arguments provided to function-like macro invocation
1>  BOOST_MPL_AUX_NA_SPEC(3, if_)
1>                        ^
1>  z:\vc\x64\include\boost/preprocessor/facilities/expand.hpp(26,10):  note: macro 'BOOST_PP_EXPAND_I' defined here
1>  # define BOOST_PP_EXPAND_I(x) x
1>           ^
1>  In file included from test.cpp:16:
1>  In file included from z:\vc\x64\include\boost/filesystem.hpp:16:
1>  In file included from z:\vc\x64\include\boost/filesystem/path.hpp:28:
1>  In file included from z:\vc\x64\include\boost/iterator/iterator_facade.hpp:14:
1>  In file included from z:\vc\x64\include\boost/iterator/iterator_categories.hpp:15:
1>  In file included from z:\vc\x64\include\boost/mpl/eval_if.hpp:17:
1>z:\vc\x64\include\boost/mpl/if.hpp(131,1): error : expected a qualified name after 'typename'
1>  BOOST_MPL_AUX_NA_SPEC(3, if_)
1>  ^
1>  z:\vc\x64\include\boost/mpl/aux_/na_spec.hpp(161,40):  note: expanded from macro 'BOOST_MPL_AUX_NA_SPEC'
1>  #define BOOST_MPL_AUX_NA_SPEC(i, name) \
1>                                         ^
1>  z:\vc\x64\include\boost/mpl/aux_/na_spec.hpp(154,47):  note: expanded from macro '\
1>
1>  BOOST_MPL_AUX_NA_SPEC_NO_ETI'
1>  #define BOOST_MPL_AUX_NA_SPEC_NO_ETI(i, name) \
1>                                                ^
1>  z:\vc\x64\include\boost/mpl/aux_/na_spec.hpp(64,11):  note: expanded from macro '\
1>
1>  BOOST_MPL_AUX_NA_SPEC_MAIN'
1>            BOOST_MPL_PP_PARAMS(i, typename T) \
1>            ^
1>  z:\vc\x64\include\boost/mpl/aux_/preprocessor/params.hpp(58,11):  note: expanded from macro 'BOOST_MPL_PP_PARAMS'
1>          , BOOST_MPL_PP_AUX_PARAM_FUNC \
1>            ^
1>  In file included from test.cpp:16:
1>  In file included from z:\vc\x64\include\boost/filesystem.hpp:16:
1>  In file included from z:\vc\x64\include\boost/filesystem/path.hpp:28:
1>  In file included from z:\vc\x64\include\boost/iterator/iterator_facade.hpp:14:
1>  In file included from z:\vc\x64\include\boost/iterator/iterator_categories.hpp:15:
1>  In file included from z:\vc\x64\include\boost/mpl/eval_if.hpp:17:
1>z:\vc\x64\include\boost/mpl/if.hpp(131,1): error : expected ',' or '>' in template-parameter-list
1>  z:\vc\x64\include\boost/mpl/aux_/na_spec.hpp(161,40):  note: expanded from macro 'BOOST_MPL_AUX_NA_SPEC'
1>  #define BOOST_MPL_AUX_NA_SPEC(i, name) \
1>                                         ^
1>  z:\vc\x64\include\boost/mpl/aux_/na_spec.hpp(154,47):  note: expanded from macro '\
1>
1>  BOOST_MPL_AUX_NA_SPEC_NO_ETI'
1>  #define BOOST_MPL_AUX_NA_SPEC_NO_ETI(i, name) \
1>                                                ^
1>  z:\vc\x64\include\boost/mpl/aux_/na_spec.hpp(65,9):  note: expanded from macro '\
1>
1>  BOOST_MPL_AUX_NA_SPEC_MAIN'
1>          BOOST_MPL_PP_NESTED_DEF_PARAMS_TAIL(i, typename T, na) \
1>          ^
1>  note: (skipping 3 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)
1>  z:\vc\x64\include\boost/preprocessor/cat.hpp(22,32):  note: expanded from macro 'BOOST_PP_CAT'
1>  #    define BOOST_PP_CAT(a, b) BOOST_PP_CAT_I(a, b)
1>                                 ^
1>  z:\vc\x64\include\boost/preprocessor/cat.hpp(31,53):  note: expanded from macro 'BOOST_PP_CAT_I'
1>  #    define BOOST_PP_CAT_I(a, b) BOOST_PP_CAT_II(~, a ## b)
1>                                                      ^
1>  <scratch space>(4,1):  note: expanded from here
1>  BOOST_PP_REPEAT_1
1>  ^
1>  In file included from test.cpp:16:
1>  In file included from z:\vc\x64\include\boost/filesystem.hpp:16:
1>  In file included from z:\vc\x64\include\boost/filesystem/path.hpp:28:
1>  In file included from z:\vc\x64\include\boost/iterator/iterator_facade.hpp:14:
1>  In file included from z:\vc\x64\include\boost/iterator/iterator_categories.hpp:15:
1>  In file included from z:\vc\x64\include\boost/mpl/eval_if.hpp:17:
1>z:\vc\x64\include\boost/mpl/if.hpp(131,1): error : template argument for template type parameter must be a type
1>  BOOST_MPL_AUX_NA_SPEC(3, if_)
1>  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1>  z:\vc\x64\include\boost/mpl/aux_/na_spec.hpp(161,40):  note: expanded from macro 'BOOST_MPL_AUX_NA_SPEC'
1>  #define BOOST_MPL_AUX_NA_SPEC(i, name) \
1>                                         ^
1>  z:\vc\x64\include\boost/mpl/aux_/na_spec.hpp(154,47):  note: expanded from macro '\
1>
1>  BOOST_MPL_AUX_NA_SPEC_NO_ETI'
1>  #define BOOST_MPL_AUX_NA_SPEC_NO_ETI(i, name) \
1>                                                ^
1>  z:\vc\x64\include\boost/mpl/aux_/na_spec.hpp(68,17):  note: expanded from macro '\
1>
1>  BOOST_MPL_AUX_NA_SPEC_MAIN'
1>          : name< BOOST_MPL_PP_PARAMS(i, T) > \
1>                  ^~~~~~~~~~~~~~~~~~~~~~~~~
1>  note: (skipping 6 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)
1>  z:\vc\x64\include\boost/preprocessor/cat.hpp(31,53):  note: expanded from macro 'BOOST_PP_CAT_I'
1>  #    define BOOST_PP_CAT_I(a, b) BOOST_PP_CAT_II(~, a ## b)
1>                                                      ^~~~~~
1>  <scratch space>(29,1):  note: expanded from here
1>  T3
1>  ^~
1>  z:\vc\x64\include\boost/preprocessor/cat.hpp(32,37):  note: expanded from macro 'BOOST_PP_CAT_II'
1>  #    define BOOST_PP_CAT_II(p, res) res
1>                                      ^~~
1>  z:\vc\x64\include\boost/mpl/if.hpp(53,39):  note: template parameter is declared here
1>      , typename BOOST_MPL_AUX_NA_PARAM(T3)
1>                                        ^
1>  In file included from test.cpp:16:
1>  In file included from z:\vc\x64\include\boost/filesystem.hpp:16:
1>  In file included from z:\vc\x64\include\boost/filesystem/path.hpp:28:
1>  In file included from z:\vc\x64\include\boost/iterator/iterator_facade.hpp:14:
1>  In file included from z:\vc\x64\include\boost/iterator/iterator_categories.hpp:15:
1>z:\vc\x64\include\boost/mpl/eval_if.hpp(67,23): error : too many arguments provided to function-like macro invocation
1>  BOOST_MPL_AUX_NA_SPEC(3, eval_if)
1>                        ^
1>  z:\vc\x64\include\boost/preprocessor/facilities/expand.hpp(26,10):  note: macro 'BOOST_PP_EXPAND_I' defined here
1>  # define BOOST_PP_EXPAND_I(x) x
1>           ^
1>  In file included from test.cpp:16:
1>  In file included from z:\vc\x64\include\boost/filesystem.hpp:16:
1>  In file included from z:\vc\x64\include\boost/filesystem/path.hpp:28:
1>  In file included from z:\vc\x64\include\boost/iterator/iterator_facade.hpp:14:
1>  In file included from z:\vc\x64\include\boost/iterator/iterator_categories.hpp:15:
1>z:\vc\x64\include\boost/mpl/eval_if.hpp(67,1): error : expected a qualified name after 'typename'
1>  BOOST_MPL_AUX_NA_SPEC(3, eval_if)
1>  ^
1>  z:\vc\x64\include\boost/mpl/aux_/na_spec.hpp(161,40):  note: expanded from macro 'BOOST_MPL_AUX_NA_SPEC'
1>  #define BOOST_MPL_AUX_NA_SPEC(i, name) \
1>                                         ^
1>  z:\vc\x64\include\boost/mpl/aux_/na_spec.hpp(154,47):  note: expanded from macro '\
1>
1>  BOOST_MPL_AUX_NA_SPEC_NO_ETI'
1>  #define BOOST_MPL_AUX_NA_SPEC_NO_ETI(i, name) \
1>                                                ^
1>  z:\vc\x64\include\boost/mpl/aux_/na_spec.hpp(64,11):  note: expanded from macro '\
1>
1>  BOOST_MPL_AUX_NA_SPEC_MAIN'
1>            BOOST_MPL_PP_PARAMS(i, typename T) \
1>            ^
1>  z:\vc\x64\include\boost/mpl/aux_/preprocessor/params.hpp(58,11):  note: expanded from macro 'BOOST_MPL_PP_PARAMS'
1>          , BOOST_MPL_PP_AUX_PARAM_FUNC \
1>            ^
1>  In file included from test.cpp:16:
1>  In file included from z:\vc\x64\include\boost/filesystem.hpp:16:
1>  In file included from z:\vc\x64\include\boost/filesystem/path.hpp:28:
1>  In file included from z:\vc\x64\include\boost/iterator/iterator_facade.hpp:14:
1>  In file included from z:\vc\x64\include\boost/iterator/iterator_categories.hpp:15:
1>z:\vc\x64\include\boost/mpl/eval_if.hpp(67,1): error : expected ',' or '>' in template-parameter-list
1>  z:\vc\x64\include\boost/mpl/aux_/na_spec.hpp(161,40):  note: expanded from macro 'BOOST_MPL_AUX_NA_SPEC'
1>  #define BOOST_MPL_AUX_NA_SPEC(i, name) \
1>                                         ^
1>  z:\vc\x64\include\boost/mpl/aux_/na_spec.hpp(154,47):  note: expanded from macro '\
1>
1>  BOOST_MPL_AUX_NA_SPEC_NO_ETI'
1>  #define BOOST_MPL_AUX_NA_SPEC_NO_ETI(i, name) \
1>                                                ^
1>  z:\vc\x64\include\boost/mpl/aux_/na_spec.hpp(65,9):  note: expanded from macro '\
1>
1>  BOOST_MPL_AUX_NA_SPEC_MAIN'
1>          BOOST_MPL_PP_NESTED_DEF_PARAMS_TAIL(i, typename T, na) \
1>          ^
1>  note: (skipping 3 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)
1>  z:\vc\x64\include\boost/preprocessor/cat.hpp(22,32):  note: expanded from macro 'BOOST_PP_CAT'
1>  #    define BOOST_PP_CAT(a, b) BOOST_PP_CAT_I(a, b)
1>                                 ^
1>  z:\vc\x64\include\boost/preprocessor/cat.hpp(31,53):  note: expanded from macro 'BOOST_PP_CAT_I'
1>  #    define BOOST_PP_CAT_I(a, b) BOOST_PP_CAT_II(~, a ## b)
1>                                                      ^
1>  <scratch space>(29,1):  note: expanded from here
1>  BOOST_PP_REPEAT_1
1>  ^
1>  In file included from test.cpp:16:
1>  In file included from z:\vc\x64\include\boost/filesystem.hpp:16:
1>  In file included from z:\vc\x64\include\boost/filesystem/path.hpp:28:
1>  In file included from z:\vc\x64\include\boost/iterator/iterator_facade.hpp:14:
1>  In file included from z:\vc\x64\include\boost/iterator/iterator_categories.hpp:15:
1>z:\vc\x64\include\boost/mpl/eval_if.hpp(67,1): error : template argument for template type parameter must be a type
1>  BOOST_MPL_AUX_NA_SPEC(3, eval_if)
1>  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1>  z:\vc\x64\include\boost/mpl/aux_/na_spec.hpp(161,40):  note: expanded from macro 'BOOST_MPL_AUX_NA_SPEC'
1>  #define BOOST_MPL_AUX_NA_SPEC(i, name) \
1>                                         ^
1>  z:\vc\x64\include\boost/mpl/aux_/na_spec.hpp(154,47):  note: expanded from macro '\
1>
1>  BOOST_MPL_AUX_NA_SPEC_NO_ETI'
1>  #define BOOST_MPL_AUX_NA_SPEC_NO_ETI(i, name) \
1>                                                ^
1>  z:\vc\x64\include\boost/mpl/aux_/na_spec.hpp(68,17):  note: expanded from macro '\
1>
1>  BOOST_MPL_AUX_NA_SPEC_MAIN'
1>          : name< BOOST_MPL_PP_PARAMS(i, T) > \
1>                  ^~~~~~~~~~~~~~~~~~~~~~~~~
1>  note: (skipping 6 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)
1>  z:\vc\x64\include\boost/preprocessor/cat.hpp(31,53):  note: expanded from macro 'BOOST_PP_CAT_I'
1>  #    define BOOST_PP_CAT_I(a, b) BOOST_PP_CAT_II(~, a ## b)
1>                                                      ^~~~~~
1>  <scratch space>(32,1):  note: expanded from here
1>  T3
1>  ^~
1>  z:\vc\x64\include\boost/preprocessor/cat.hpp(32,37):  note: expanded from macro 'BOOST_PP_CAT_II'
1>  #    define BOOST_PP_CAT_II(p, res) res
1>                                      ^~~
1>  z:\vc\x64\include\boost/mpl/eval_if.hpp(29,39):  note: template parameter is declared here
1>      , typename BOOST_MPL_AUX_NA_PARAM(F2)
1>                                        ^
1>  In file included from test.cpp:16:
1>  In file included from z:\vc\x64\include\boost/filesystem.hpp:16:
1>  In file included from z:\vc\x64\include\boost/filesystem/path.hpp:28:
1>  In file included from z:\vc\x64\include\boost/iterator/iterator_facade.hpp:14:
1>  In file included from z:\vc\x64\include\boost/iterator/iterator_categories.hpp:16:
1>z:\vc\x64\include\boost/mpl/identity.hpp(40,30): error : too many arguments provided to function-like macro invocation
1>  BOOST_MPL_AUX_NA_SPEC_NO_ETI(1, identity)
1>                               ^
1>  z:\vc\x64\include\boost/preprocessor/facilities/expand.hpp(26,10):  note: macro 'BOOST_PP_EXPAND_I' defined here
1>  # define BOOST_PP_EXPAND_I(x) x
1>           ^
1>  In file included from test.cpp:16:
1>  In file included from z:\vc\x64\include\boost/filesystem.hpp:16:
1>  In file included from z:\vc\x64\include\boost/filesystem/path.hpp:28:
1>  In file included from z:\vc\x64\include\boost/iterator/iterator_facade.hpp:14:
1>  In file included from z:\vc\x64\include\boost/iterator/iterator_categories.hpp:16:
1>z:\vc\x64\include\boost/mpl/identity.hpp(40,1): error : expected a qualified name after 'typename'
1>  BOOST_MPL_AUX_NA_SPEC_NO_ETI(1, identity)
1>  ^
1>  z:\vc\x64\include\boost/mpl/aux_/na_spec.hpp(154,47):  note: expanded from macro 'BOOST_MPL_AUX_NA_SPEC_NO_ETI'
1>  #define BOOST_MPL_AUX_NA_SPEC_NO_ETI(i, name) \
1>                                                ^
1>  z:\vc\x64\include\boost/mpl/aux_/na_spec.hpp(64,11):  note: expanded from macro '\
1>
1>  BOOST_MPL_AUX_NA_SPEC_MAIN'
1>            BOOST_MPL_PP_PARAMS(i, typename T) \
1>            ^
1>  z:\vc\x64\include\boost/mpl/aux_/preprocessor/params.hpp(58,11):  note: expanded from macro 'BOOST_MPL_PP_PARAMS'
1>          , BOOST_MPL_PP_AUX_PARAM_FUNC \
1>            ^
1>  In file included from test.cpp:16:
1>  In file included from z:\vc\x64\include\boost/filesystem.hpp:16:
1>  In file included from z:\vc\x64\include\boost/filesystem/path.hpp:28:
1>  In file included from z:\vc\x64\include\boost/iterator/iterator_facade.hpp:14:
1>  In file included from z:\vc\x64\include\boost/iterator/iterator_categories.hpp:16:
1>z:\vc\x64\include\boost/mpl/identity.hpp(40,1): error : expected ',' or '>' in template-parameter-list
1>  z:\vc\x64\include\boost/mpl/aux_/na_spec.hpp(154,47):  note: expanded from macro 'BOOST_MPL_AUX_NA_SPEC_NO_ETI'
1>  #define BOOST_MPL_AUX_NA_SPEC_NO_ETI(i, name) \
1>                                                ^
1>  z:\vc\x64\include\boost/mpl/aux_/na_spec.hpp(65,9):  note: expanded from macro '\
1>
1>  BOOST_MPL_AUX_NA_SPEC_MAIN'
1>          BOOST_MPL_PP_NESTED_DEF_PARAMS_TAIL(i, typename T, na) \
1>          ^
1>  z:\vc\x64\include\boost/mpl/aux_/preprocessor/def_params_tail.hpp(97,5):  note: expanded from macro 'BOOST_MPL_PP_NESTED_DEF_PARAMS_TAIL'
1>      BOOST_MPL_PP_DEF_PARAMS_TAIL_IMPL(i, param, BOOST_PP_IDENTITY(=value)) \
1>      ^
1>  note: (skipping 2 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)
1>  z:\vc\x64\include\boost/preprocessor/cat.hpp(22,32):  note: expanded from macro 'BOOST_PP_CAT'
1>  #    define BOOST_PP_CAT(a, b) BOOST_PP_CAT_I(a, b)
1>                                 ^
1>  z:\vc\x64\include\boost/preprocessor/cat.hpp(31,53):  note: expanded from macro 'BOOST_PP_CAT_I'
1>  #    define BOOST_PP_CAT_I(a, b) BOOST_PP_CAT_II(~, a ## b)
1>                                                      ^
1>  <scratch space>(32,1):  note: expanded from here
1>  BOOST_PP_REPEAT_1
1>  ^
1>  In file included from test.cpp:16:
1>  In file included from z:\vc\x64\include\boost/filesystem.hpp:16:
1>  In file included from z:\vc\x64\include\boost/filesystem/path.hpp:28:
1>  In file included from z:\vc\x64\include\boost/iterator/iterator_facade.hpp:14:
1>  In file included from z:\vc\x64\include\boost/iterator/iterator_categories.hpp:16:
1>z:\vc\x64\include\boost/mpl/identity.hpp(40,1): error : template argument for template type parameter must be a type
1>  BOOST_MPL_AUX_NA_SPEC_NO_ETI(1, identity)
1>  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1>  z:\vc\x64\include\boost/mpl/aux_/na_spec.hpp(154,47):  note: expanded from macro 'BOOST_MPL_AUX_NA_SPEC_NO_ETI'
1>  #define BOOST_MPL_AUX_NA_SPEC_NO_ETI(i, name) \
1>                                                ^
1>  z:\vc\x64\include\boost/mpl/aux_/na_spec.hpp(68,17):  note: expanded from macro '\
1>
1>  BOOST_MPL_AUX_NA_SPEC_MAIN'
1>          : name< BOOST_MPL_PP_PARAMS(i, T) > \
1>                  ^~~~~~~~~~~~~~~~~~~~~~~~~
1>  z:\vc\x64\include\boost/mpl/aux_/preprocessor/params.hpp(58,11):  note: expanded from macro 'BOOST_MPL_PP_PARAMS'
1>          , BOOST_MPL_PP_AUX_PARAM_FUNC \
1>          ~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1>  note: (skipping 5 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)
1>  z:\vc\x64\include\boost/preprocessor/cat.hpp(31,53):  note: expanded from macro 'BOOST_PP_CAT_I'
1>  #    define BOOST_PP_CAT_I(a, b) BOOST_PP_CAT_II(~, a ## b)
1>                                                      ^~~~~~
1>  <scratch space>(32,1):  note: expanded from here
1>  T1
1>  ^~
1>  z:\vc\x64\include\boost/preprocessor/cat.hpp(32,37):  note: expanded from macro 'BOOST_PP_CAT_II'
1>  #    define BOOST_PP_CAT_II(p, res) res
1>                                      ^~~
1>  z:\vc\x64\include\boost/mpl/identity.hpp(23,39):  note: template parameter is declared here
1>        typename BOOST_MPL_AUX_NA_PARAM(T)
1>                                        ^
1>z:\vc\x64\include\boost/mpl/identity.hpp(41,30): error : too many arguments provided to function-like macro invocation
1>  BOOST_MPL_AUX_NA_SPEC_NO_ETI(1, make_identity)
1>                               ^
1>  z:\vc\x64\include\boost/preprocessor/facilities/expand.hpp(26,10):  note: macro 'BOOST_PP_EXPAND_I' defined here
1>  # define BOOST_PP_EXPAND_I(x) x
1>           ^
1>  In file included from test.cpp:16:
1>  In file included from z:\vc\x64\include\boost/filesystem.hpp:16:
1>  In file included from z:\vc\x64\include\boost/filesystem/path.hpp:28:
1>  In file included from z:\vc\x64\include\boost/iterator/iterator_facade.hpp:14:
1>  In file included from z:\vc\x64\include\boost/iterator/iterator_categories.hpp:16:
1>z:\vc\x64\include\boost/mpl/identity.hpp(41,1): error : expected a qualified name after 'typename'
1>  BOOST_MPL_AUX_NA_SPEC_NO_ETI(1, make_identity)
1>  ^
1>  z:\vc\x64\include\boost/mpl/aux_/na_spec.hpp(154,47):  note: expanded from macro 'BOOST_MPL_AUX_NA_SPEC_NO_ETI'
1>  #define BOOST_MPL_AUX_NA_SPEC_NO_ETI(i, name) \
1>                                                ^
1>  z:\vc\x64\include\boost/mpl/aux_/na_spec.hpp(64,11):  note: expanded from macro '\
1>
1>  BOOST_MPL_AUX_NA_SPEC_MAIN'
1>            BOOST_MPL_PP_PARAMS(i, typename T) \
1>            ^
1>  z:\vc\x64\include\boost/mpl/aux_/preprocessor/params.hpp(58,11):  note: expanded from macro 'BOOST_MPL_PP_PARAMS'
1>          , BOOST_MPL_PP_AUX_PARAM_FUNC \
1>            ^
1>  In file included from test.cpp:16:
1>  In file included from z:\vc\x64\include\boost/filesystem.hpp:16:
1>  In file included from z:\vc\x64\include\boost/filesystem/path.hpp:28:
1>  In file included from z:\vc\x64\include\boost/iterator/iterator_facade.hpp:14:
1>  In file included from z:\vc\x64\include\boost/iterator/iterator_categories.hpp:16:
1>z:\vc\x64\include\boost/mpl/identity.hpp(41,1): error : expected ',' or '>' in template-parameter-list
1>  z:\vc\x64\include\boost/mpl/aux_/na_spec.hpp(154,47):  note: expanded from macro 'BOOST_MPL_AUX_NA_SPEC_NO_ETI'
1>  #define BOOST_MPL_AUX_NA_SPEC_NO_ETI(i, name) \
1>                                                ^
1>  z:\vc\x64\include\boost/mpl/aux_/na_spec.hpp(65,9):  note: expanded from macro '\
1>
1>  BOOST_MPL_AUX_NA_SPEC_MAIN'
1>          BOOST_MPL_PP_NESTED_DEF_PARAMS_TAIL(i, typename T, na) \
1>          ^
1>  z:\vc\x64\include\boost/mpl/aux_/preprocessor/def_params_tail.hpp(97,5):  note: expanded from macro 'BOOST_MPL_PP_NESTED_DEF_PARAMS_TAIL'
1>      BOOST_MPL_PP_DEF_PARAMS_TAIL_IMPL(i, param, BOOST_PP_IDENTITY(=value)) \
1>      ^
1>  note: (skipping 2 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)
1>  z:\vc\x64\include\boost/preprocessor/cat.hpp(22,32):  note: expanded from macro 'BOOST_PP_CAT'
1>  #    define BOOST_PP_CAT(a, b) BOOST_PP_CAT_I(a, b)
1>                                 ^
1>  z:\vc\x64\include\boost/preprocessor/cat.hpp(31,53):  note: expanded from macro 'BOOST_PP_CAT_I'
1>  #    define BOOST_PP_CAT_I(a, b) BOOST_PP_CAT_II(~, a ## b)
1>                                                      ^
1>  <scratch space>(61,1):  note: expanded from here
1>  BOOST_PP_REPEAT_1
1>  ^
1>CL : fatal error : too many errors emitted, stopping now [-ferror-limit=]
1>  20 errors generated.
========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========


Up till now I was using a hacked boost-1.62. So in order to see what would happen, I also built boost-1.63. Apart from a small change in type_with_alignment.hpp (adding a ckeck for _MSC_VER not to exist if __clang__ does exist in line 87), boost-1.63 compiles without a problem (no specific (relevant to the emulation) command line parameters).

Is there a macro I should define or is there something else I should set/do in order to use boost-1.64 with Clang 4.0.0 on windows? Any other suggestions?
 
degski
--
"Ihre sogenannte Religion wirkt bloß wie ein Opiat reizend, betäubend, Schmerzen aus Schwäche stillend." - Novalis 1798

_______________________________________________
Boost-users mailing list
[hidden email]
https://lists.boost.org/mailman/listinfo.cgi/boost-users
Reply | Threaded
Open this post in threaded view
|

Fwd: [boost] [clang] clang-cl expansion of macros

Boost - Users mailing list

I've sent this again as there was no boost-bounce message. I've reduced the error output.

On 16 April 2016 at 17:58, Edward Diener <[hidden email]> wrote:
What I strongly suspect will finally happen is that clang will not fix these emulation problems because they are too tricky and numerous to do. Instead they will probably declare that their emulation is good enough for the majority of preprocessor constructs and that Boost PP, which pushes the preprocessor to its limits, is not meant to work with their flawed VC++ emulation. I hope I am wrong about that supposition, but having spent much time in Boost PP and Boost VMD trying to workaround VC++ non-standard preprocessor behavior I can envision that having to code "down" to that behavior in numerous complicated instances will be too much time consuming work for the clang developers who have chosen to work with VC++ preprocessor emulation.


I've successfully built boost-1.64 with VC1410 (from the developer command prompt). Trying to use boost with a project using Clang 4.0.0 (both the LLVM and C2 backends) gives me the following PP error messages:


1>------ Rebuild All started: Project: test, Configuration: Debug x64 ------
1>  In file included from test.cpp:16:
1>  In file included from z:\vc\x64\include\boost/filesystem.hpp:16:
1>  In file included from z:\vc\x64\include\boost/filesystem/path.hpp:28:
1>  In file included from z:\vc\x64\include\boost/iterator/iterator_facade.hpp:12:
1>  In file included from z:\vc\x64\include\boost/iterator/interoperable.hpp:11:
1>  In file included from z:\vc\x64\include\boost/mpl/or.hpp:43:
1>  In file included from z:\vc\x64\include\boost/mpl/aux_/include_preprocessed.hpp:37:
1>z:\vc\x64\include\boost/mpl/aux_/preprocessed/plain/or.hpp(59,7): error : too many arguments provided to function-like macro invocation
1>        2
1>        ^
1>  z:\vc\x64\include\boost/preprocessor/facilities/expand.hpp(26,10):  note: macro 'BOOST_PP_EXPAND_I' defined here
1>  # define BOOST_PP_EXPAND_I(x) x
1>           ^
1>  In file included from test.cpp:16:
1>  In file included from z:\vc\x64\include\boost/filesystem.hpp:16:
1>  In file included from z:\vc\x64\include\boost/filesystem/path.hpp:28:
1>  In file included from z:\vc\x64\include\boost/iterator/iterator_facade.hpp:12:
1>  In file included from z:\vc\x64\include\boost/iterator/interoperable.hpp:11:
1>  In file included from z:\vc\x64\include\boost/mpl/or.hpp:43:
1>  In file included from z:\vc\x64\include\boost/mpl/aux_/include_preprocessed.hpp:37:
1>z:\vc\x64\include\boost/mpl/aux_/preprocessed/plain/or.hpp(58,1): error : expected a qualified name after 'typename'
1>  BOOST_MPL_AUX_NA_SPEC2(
1>  ^
1>  z:\vc\x64\include\boost/mpl/aux_/na_spec.hpp(166,44):  note: expanded from macro 'BOOST_MPL_AUX_NA_SPEC2'
1>  #define BOOST_MPL_AUX_NA_SPEC2(i, j, name) \
1>                                             ^
1>  z:\vc\x64\include\boost/mpl/aux_/na_spec.hpp(64,11):  note: expanded from macro '\
1>
1>  BOOST_MPL_AUX_NA_SPEC_MAIN'
1>            BOOST_MPL_PP_PARAMS(i, typename T) \
1>            ^
1>  z:\vc\x64\include\boost/mpl/aux_/preprocessor/params.hpp(58,11):  note: expanded from macro 'BOOST_MPL_PP_PARAMS'
1>          , BOOST_MPL_PP_AUX_PARAM_FUNC \
1>            ^
1>  In file included from test.cpp:16:
1>  In file included from z:\vc\x64\include\boost/filesystem.hpp:16:
1>  In file included from z:\vc\x64\include\boost/filesystem/path.hpp:28:
1>  In file included from z:\vc\x64\include\boost/iterator/iterator_facade.hpp:12:
1>  In file included from z:\vc\x64\include\boost/iterator/interoperable.hpp:11:
1>  In file included from z:\vc\x64\include\boost/mpl/or.hpp:43:
1>  In file included from z:\vc\x64\include\boost/mpl/aux_/include_preprocessed.hpp:37:
1>z:\vc\x64\include\boost/mpl/aux_/preprocessed/plain/or.hpp(58,1): error : expected ',' or '>' in template-parameter-list


Up till now I was using a hacked boost-1.62. So in order to see what would happen, I also built boost-1.63. Apart from a small change in type_with_alignment.hpp (adding a ckeck for _MSC_VER not to exist if __clang__ does exist in line 87), boost-1.63 compiles without a problem (no specific (relevant to the emulation) command line parameters).

Is there a macro I should define or is there something else I should set/do in order to use boost-1.64 with Clang 4.0.0 on windows? Any other suggestions?
 
degski
--
"Ihre sogenannte Religion wirkt bloß wie ein Opiat reizend, betäubend, Schmerzen aus Schwäche stillend." - Novalis 1798

_______________________________________________
Boost-users mailing list
[hidden email]
https://lists.boost.org/mailman/listinfo.cgi/boost-users