From: Dave Moore (jdmoore99_at_[hidden])
Date: 2006-03-30 11:28:25
I would like to see this as well. The volume of warnings is pretty
shocking when including Boost from MC++, C++/CLI, or even simply VC
8.0 compiling to native code.
On 3/30/06, Edward Diener <eddielee_at_[hidden]> wrote:
> Since no one responded to this in the boost user group, I will post it
> here in this group.
> When compiling managed code in VC++ .NET, which is any of the /clr
> compiler options, the programmer can mix both CLR classes and regular
> C++ classes. In the regular C++ classes, Boost should work fine. The
> VC++ macro which tells one that managed code of any kind is being
> compiled is _MANAGED, which is defined if managed code is being compiled
> else it is not defined. So when any of the /clr compiler options are
> being used _MANAGED is defined, else it is not defined.
> The VC++ compiler issues compiler warning C4561 whenever managed code is
> being compiled and __fastcall shows up as a calling convention in any
> way. Obviously the programmer can turn off this warning via a VC++
> #pragma, but I am wondering if Boost could not change some of its
> headers to avoid this warning. In Boost bind and mem_fn, the programmer
> has to specifically ask for __fastcall support via special Boost macros
> to have any functions declared with the __fastcall calling convention,
> so nothing should be done there since it is clearly a programming error
> if he does so while compiling managed code.
> However there are two other places in Boost which I have discovered
> where functions with the __fastcall calling convention are declared
> without the programmer doing anything.
> The first, and most cumbersome reagrding warning messages, is in
> type_traits in the helper header files
> type_traits\detail\is_mem_fun_pointer_tester.hpp and
> type_traits\detail\is_function_pointer_tester.hpp. Since many other
> libraries, lambda in my case recently, uses type_traits, might not these
> headers be changed so that when VC++ is the compiler and _MANAGED is
> defined, the __fastcall versions of these helper functions are not
> declared ?
> The second, which I have not encountered but which I saw while searching
> through Boost header code, is in regex\config.h and I do not know, given
> some other macros there, whether BOOST_REGEX_CALL can ever be __fastcall
> when compiling with /clr, but if it can perhaps a change can be made
> there also.
> I know that it is not the purpose of Boost to try to accomodate C++ .NET
> programmers creating /clr compilations using Boost, especially when just
> warnings and not errors are issued. But in this case, using the
> predefined macro _MANAGED in VC++ and BOOST_MSVC, it would seem this
> acoomodation could be made. So I would like the Boost developers of
> type_traits, especially since it is used by so many other Boost
> libraries, and regex to consider it.
> Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk