David and Niels,
Thanks!
Thank you guys,
the patch from Niels solved the problem! A good hint.
I run in another problem when multiple files inside a project include the extension headers. The operators in typeinfo.hpp are compiled into different object files which produces errors at link time. To solve that I declared these functions as inline see patch below.
Index: typeinfo.hpp
===================================================================
--- typeinfo.hpp 2008-04-14 15:18:38.000000000 +0200
+++ typeinfo_mod.hpp 2008-04-14 16:04:28.000000000 +0200
@@ -42,17 +42,17 @@
#if defined(__APPLE__) || defined(__GNUC__) || defined(BOOST_EXTENSION_FORCE_FAST_TYPEINFO)
namespace boost {
namespace extensions {
-bool operator<(const default_type_info& first,
+inline bool operator<(const default_type_info& first,
const default_type_info& second) {
return &first.type < &second.type;
}
-bool operator==(const default_type_info& first,
+inline bool operator==(const default_type_info& first,
const default_type_info& second) {
return &first.type == &second.type;
}
-bool operator>(const default_type_info& first,
+inline bool operator>(const default_type_info& first,
const default_type_info& second) {
return &first.type > &second.type;
}
@@ -61,17 +61,17 @@
#if defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
#include <string>
namespace boost { namespace extensions {
-bool operator<(const default_type_info& first,
+inline bool operator<(const default_type_info& first,
const default_type_info& second) {
return std::strcmp(first.type.raw_name(), second.type.raw_name()) < 0;
}
-bool operator==(const default_type_info& first,
+inline bool operator==(const default_type_info& first,
const default_type_info& second) {
return std::strcmp(first.type.raw_name(), second.type.raw_name()) == 0;
}
-bool operator>(const default_type_info& first,
+inline bool operator>(const default_type_info& first,
const default_type_info& second) {
return std::strcmp(first.type.raw_name(), second.type.raw_name()) > 0;
}
@@ -80,17 +80,17 @@
#else // OTHER OS
#include <string>
namespace boost { namespace extensions {
-bool operator<(const default_type_info& first,
+inline bool operator<(const default_type_info& first,
const default_type_info& second) {
return std::strcmp(first.type.name(), second.type.name()) < 0;
}
-bool operator==(const default_type_info& first,
+inline bool operator==(const default_type_info& first,
const default_type_info& second) {
return std::strcmp(first.type.name(), second.type.name()) == 0;
}
-bool operator>(const default_type_info& first,
+inline bool operator>(const default_type_info& first,
const default_type_info& second) {
return std::strcmp(first.type.name(), second.type.name()) > 0;--
}
Jeremy Pack wrote:
Thanks! That looks like it ought to fix it.
I updated the Sandbox with the proposed fix, and was able to successfully
build and run the tests and examples on MSVC 9 and GCC 4. Please let me know
if that fixes the issue for MSVC 7.1.
Jeremy
On Sat, Apr 19, 2008 at 9:20 AM, Niels Dekker - mail address until
2008-12-31 <nd_mail_address_valid_until_2008-12-31@xs4all.nl> wrote:
David Matz wrote:
error: error C2039: 'boost::get': Ist kein Element vonJeremy Pack wrote:
'boost::extensions::shared_library'
Please add the command line option /P to your build - this will outputIt seems to me that the compile error isn't caused by Boost.PreProcessor.
the preprocessed version of your file test_extension_and_optional.cpp.
Then send this to me - I might be able to figure out what is going on.
It looks like one of the preprocessor macros used by
Boost.PreProcessor isn't working
Actually I think I've found a workaround: Explicitly qualify the
shared_library::get member function call in extension/convenience.hpp
(line 29),
(by adding the class name, "shared_library::") and the MSVC 7.1 error
message
disappears!
HTH, Niels
PS Here's the patch:
Index: convenience.hpp
===================================================================
--- convenience.hpp (revision 44584)
+++ convenience.hpp (working copy)
@@ -26,7 +26,7 @@
return;
}
void (*func)(factory_map &) =
- lib.get<void, factory_map &>(external_function_name);
+ lib.shared_library::get<void, factory_map
&>(external_function_name);
if (!func) {
return;
David Matz
---------------------------- site: www.spatialview.com