Boost logo

Boost Users :

Subject: [Boost-users] Fwd: [boost] [clang] clang-cl expansion of macros
From: degski (degski_at_[hidden])
Date: 2017-04-29 07:31:59


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 <eldiener_at_[hidden]> 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/iterat
or/iterator_facade.hpp:12:
1> In file included from z:\vc\x64\include\boost/iterat
or/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/au
x_/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/iterat
or/iterator_facade.hpp:12:
1> In file included from z:\vc\x64\include\boost/iterat
or/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/au
x_/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/iterat
or/iterator_facade.hpp:12:
1> In file included from z:\vc\x64\include\boost/iterat
or/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/au
x_/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 list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net