El 03/07/2023 a las 14:01, Andy Bell via Boost-users escribió:

Hi

I’m using the type erasure library but have an issue (which I can workaround) when compiling in Windows 10 using Embarcadero C++ Builder 11.3.

My problem is that C++ Builder brings in the Windows SDK Windows.h include file in every Windows VCL UI project it creates **before** any of my code has compiled and it’s causing conflicts in boost header member11.hpp.

This code is enough to cause the error:

#include <boost/type_erasure/any.hpp>

#include <boost/type_erasure/any_cast.hpp>

#include <boost/type_erasure/builtin.hpp>

#include <boost/type_erasure/operators.hpp>

#include <boost/type_erasure/member.hpp>

#include <boost/type_erasure/free.hpp>

#include <boost/mpl/vector.hpp>

namespace mynamespace {

BOOST_TYPE_ERASURE_MEMBER(ReadStatus)

}

The error is because Windows.h defines ‘interface’ but this code from member11.hpp also uses ‘interface’:

|template<|class|P, template<|class|...> |class|*interface*, |class||Sig|, 
|class||Concept|, |class||Base|, |class||ID|>|
|using choose_member_interface = typename 
|::boost::mpl::if_c<||::boost::is_reference<P>::value|,|
|    typename 
|::boost::mpl::if_c<||::boost::type_erasure::detail::is_non_const_ref<P>::value|,|
|*interface*<Sig, Concept, Base, const |ID|>,|
|        Base|
|    >|::type|,|
|*interface*<Sig, Concept, Base, |ID|>|
|>|::type|;|

and the compiler complains of conflicts.

Hi Andy,

The solution you propose (renaming "interface" as "interface_") looks perfectly fine to me, as template parameter names are not externally visible. In any case, would you mind filing an issue at https://github.com/boostorg/type_erasure/issues ? I may see that it's addressed.

Best,

Joaquín M López Muñoz
_______________________________________________
Boost-users mailing list
[email protected]
https://lists.boost.org/mailman/listinfo.cgi/boost-users

Reply via email to