
Hi there! Background ---------- The header boost/regex/config.hpp currently contains the following code: #if defined(BOOST_MSVC) && (BOOST_MSVC >= 1200) && defined(_MSC_EXTENSIONS) #if defined(_DEBUG) || defined(__MSVC_RUNTIME_CHECKS) || defined(_MANAGED) # define BOOST_REGEX_CALL __cdecl #else # define BOOST_REGEX_CALL __fastcall #endif # define BOOST_REGEX_CCALL __cdecl #endif the `|| defined(_MANAGED)` was added in 2006 (SVN history) to cater for the fact that __fastcall does not work on managed C++/CLI (/clr compiled) projects. See, e.g. this: http://lists.boost.org/boost-users/2004/12/9203.php Problem ------- This is really quite suboptimal, as with the solution as posted above, you need *a separate* lib/dll for managed-C++ and native-C++ Projects. Especially for the DLL, this is a non-solution, as I can only have one DLL for projects/modules that are used in the same application. _MANAGED is a define set by the VC compiler if the /clr switch is present, therefore it is actually never set when compiling the boost libraries. Of course you can set it via `define=_MANAGED` and you can then use these generated libraries from a C++/CLI project. (Which I have done: ... `define=_MANAGED` ... --with-regex ...) BUT: You can now *not* use these libraries from a non-managed ("native") C++ project as that, obviously, doesn't have _MANAGED set, and unlike with the boost build, I don't think it's feasible to define this wholesale for a native project. (And anyways, I'm rather hesitant to define this myself.) Obviously, I could just edit regex/config.hpp, but that is a maintenance nightmare of its own here. Solution -------- I *think* what really would be needed would be a define that the user could specify, something like this: #if defined(_DEBUG) || ... || defined(BOOST_REGEX_NO_FASTCALL) # define BOOST_REGEX_CALL __cdecl ... (I have attached a patch, hope this works.) Would this make sense? To add a short rationale: We use C++/CLI projects as bridges between managed and native modules of our application. In the C++ part, we use boost regexes, and sometimes it would make sense to reuse some native code in a C++/CLI bridge module. If this native code uses Boost.Regex, this doesn't work currently, as the native code file will also be compiled with /clr, and then we have a calling convention mismatch and can't use our boost-regex-dll. cheers, Martin