David and Niels,

Thanks!

I've incorporated those fixes, as well as a few readability improvements.

Please let me know if you have any other problems (or even feature requests).

Jeremy

On Tue, Apr 22, 2008 at 12:22 AM, David Matz <david.matz@spatialview.com> wrote:
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 von
'boost::extensions::shared_library'
Jeremy Pack wrote:
Please add the command line option /P to your build - this will output
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
It seems to me that the compile error isn't caused by Boost.PreProcessor.
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
----------------------------

Spatial View GmbH

mail:  david.matz@spatialview.com
site:  www.spatialview.com