[clang] clang-cl expansion of macros
You can get clang-cl ( clang-win ) to show its VC++ emulated expansion of macros somewhat by passing the c++ option '-fmacro-backtrace-limit=0' to the compiler. It is still blessedly difficult to see the what and the why of clang's error messages when expanding macro using clang-cl, but at least it gives you a better chance of understanding where clang's emulation of VC++ has gone wrong. I have posted bug 27380 to the llvm/clang bug tracker at https://llvm.org/bugs/show_bug.cgi?id=27380 showing the main failure in VC++ emulation which I see when testing Boost PP with clang-cl.
On 4/16/2016 12:58 AM, degski wrote:
On 16 April 2016 at 01:15, Edward Diener
wrote: I have posted bug 27380 to the llvm/clang bug tracker...
Thanks for not giving up (also @ Niall D.)!
There's more. See bug 27382 at https://llvm.org/bugs/show_bug.cgi?id=27382. And there is almost certainly more if the further errors from running the Boost PP tests are indicating other separate bugs. But I won't pursue further bug reports along those lines until I can ascertain whether or not fixing the ones that I have reported causes the remaining ones that appear when running the Boost PP tests to go away or not. And I haven't even started on clang-cl preprocessor bugs which the tests of VMD might reveal ! As I suspected the task of emulating the non-standard preprocessor behavior of VC++ is a daunting task and largely a fool's errand. If clang targeting VC++ had limited themselves to using their VC++ preprocessor emulation only for Windows headers and VC++ headers, while allowing all other header files to use their normal C++ standard conforming preprocessor, they would not have had to solve the emulation problem for all preprocessor macros. But they would not listen to reason concerning this. 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.
On 16 April 2016 at 17:58, Edward Diener
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
On 16 Apr 2016 at 7:58, degski wrote:
On 16 April 2016 at 01:15, Edward Diener
wrote: I have posted bug 27380 to the llvm/clang bug tracker...
Thanks for not giving up (also @ Niall D.)!
Thanks for saying so, but we could do a lot better. I flicked through the clang source code and as far as I can tell from a ten minute inspection, getting C99 preprocessor behaviour on MSVC ABI targets is as easy as flipping a boolean on. Most of the other MSVC preprocessor special behaviours only turn on with -fms-compatibility=on, and we no longer need that turned on to use Windows or indeed the MSVC CRT and STL. A source code patch ought to be mostly figuring out how to add a command line argument to control the C99 processor boolean, a few unit test cases to ensure rigour and lack of regression, and that's about it. The real effort behind such a patch would be navigating the internal politics on getting the patch into trunk. I have no need in my own code for a C99 preprocessor, hence I am not willing to invest that effort. But others with a more pressing need may wish to do so. Niall -- ned Productions Limited Consulting http://www.nedproductions.biz/ http://ie.linkedin.com/in/nialldouglas/
On 4/17/2016 7:05 AM, Niall Douglas wrote:
On 16 Apr 2016 at 7:58, degski wrote:
On 16 April 2016 at 01:15, Edward Diener
wrote: I have posted bug 27380 to the llvm/clang bug tracker...
Thanks for not giving up (also @ Niall D.)!
Thanks for saying so, but we could do a lot better.
I flicked through the clang source code and as far as I can tell from a ten minute inspection, getting C99 preprocessor behaviour on MSVC ABI targets is as easy as flipping a boolean on. Most of the other MSVC preprocessor special behaviours only turn on with -fms-compatibility=on, and we no longer need that turned on to use Windows or indeed the MSVC CRT and STL. A source code patch ought to be mostly figuring out how to add a command line argument to control the C99 processor boolean, a few unit test cases to ensure rigour and lack of regression, and that's about it.
The real effort behind such a patch would be navigating the internal politics on getting the patch into trunk. I have no need in my own code for a C99 preprocessor, hence I am not willing to invest that effort. But others with a more pressing need may wish to do so.
Why not bring up the issue on the clang developers mailing list ? Clang source code is not an area which Boost developers can affect in this mailing list, but in the clang developers mailing list you might be able to persuade a clang developer to listen to your suggestion(s).
On 17 Apr 2016 at 8:13, Edward Diener wrote:
The real effort behind such a patch would be navigating the internal politics on getting the patch into trunk. I have no need in my own code for a C99 preprocessor, hence I am not willing to invest that effort. But others with a more pressing need may wish to do so.
Why not bring up the issue on the clang developers mailing list ? Clang source code is not an area which Boost developers can affect in this mailing list, but in the clang developers mailing list you might be able to persuade a clang developer to listen to your suggestion(s).
That would be the "navigating the internal politics" I mentioned. I have no current pressing need for a C99 conforming preprocessor in my own code. Niall -- ned Productions Limited Consulting http://www.nedproductions.biz/ http://ie.linkedin.com/in/nialldouglas/
On 4/17/2016 11:41 AM, Niall Douglas wrote:
On 17 Apr 2016 at 8:13, Edward Diener wrote:
The real effort behind such a patch would be navigating the internal politics on getting the patch into trunk. I have no need in my own code for a C99 preprocessor, hence I am not willing to invest that effort. But others with a more pressing need may wish to do so.
Why not bring up the issue on the clang developers mailing list ? Clang source code is not an area which Boost developers can affect in this mailing list, but in the clang developers mailing list you might be able to persuade a clang developer to listen to your suggestion(s).
That would be the "navigating the internal politics" I mentioned. I have no current pressing need for a C99 conforming preprocessor in my own code.
Nor do I as far as clang goes, since normal clang and clang targeting mingw(-64)/gcc on Windows already has a C++ standard conformant preprocessor already and works very well with Boost libraries. I guess it must be those people who want to use clang targeting VC++ on Windows, either by itself or with the VC++14 as the backend compiler, who might want what you suggest. But since I know that isn't you from your response and it is certainly not me, someone else can address the issue of convincing clang to change their source, and "navigate the internal politics" if they like.
On 17 April 2016 at 21:35, Edward Diener
msys/mingw(-64)/gcc is not, in my experience, a good all-round solution... it's a work-around (a kludge) and comes with compromises (like wine on Linux)... the emulation is not complete (sounds familiar)... I only use one lib compiled with mingw and that is OpenBlas, it requires a fortran-compiler, as a result I'm stuck with a dll for that one :-(.
participants (3)
-
degski
-
Edward Diener
-
Niall Douglas