
After upgrading to Boost 1.33.0 I found a problem with my code when built for Intel 8.0 on Linux. The problem doesn't show up with g++. I reduced it to a simple test case. With Intel 8.0 it compiles but fails to link the executable, complaining that it can't find the 'position' and 'str' functions. Note that it does find the 'length' function.
Intel(R) C++ Compiler for 32-bit applications, Version 8.0 Build 20040304Z Package ID: l_cc_pc_8.0.058_pe061 Copyright (C) 1985-2004 Intel Corporation. All rights reserved.
I can't reproduce that with Package 8.1.026 (unfortunately you can't install both 8.0 and 8.1 at the same time, so I wasn't able to test with 8.0). I have a suspicion that what's happening is this: The match_results<const char*> template instance is explicitly instantiated in the library, and declared as "extern" in user code (so it uses the instance in the library). I suspect that your code is being built with inline expansions off, but the release version of the lib doesn't have these inline members instantiated in it, so either: 1) Try linking to the debug build of the lib when building with inline expansion turned off. 2) uncomment the line // #define BOOST_REGEX_NO_EXTERNAL_TEMPLATES in boost/regex/user.hpp and rebuild everything, the regex lib will now be slightly smaller, and your exe will be a lot bigger, but it should cure the problem. 3) Upgrade to Intel 8.1, I realise this might not be possible though. HTH, John.