
"Michel Decima" <michel_decima@yahoo.fr> wrote in message news:4134FDF4.1080803@yahoo.fr...
Hello,
I made another changes to the library source to make it works on my test platform (Linux.x86, gcc-3.3.4 and gcc-3.4.1) :
The library compiles well with gcc-3.3.4, but gcc-3.4.1 needs some help to find the 'read' and 'write' functions:
<snip>
Same error for `write' on lines 110 and 160. The missing fuctions are defined in the header operations.hpp, which is not included. (see operations-hpp.patch)
Thanks. Funny no other compiler picked this up. I'll apply this patch as soon as the other things are resolved (see below).
The inclusions of the headers gives another problem:
<snip>
/Boost/src/boost/boost/io/operations.hpp:102: error: invalid application of `sizeof' to incomplete type `boost::STATIC_ASSERTION_FAILURE< false>'
I don't understand why this assertion fails (but I didn't tried to ;) so I changed it to true...
Carlo explained this one. Here's the way it should be patched: ----------------------------------- --- operations.hpp 1 Sep 2004 01:48:40 -0000 1.37 +++ operations.hpp 1 Sep 2004 01:48:49 -0000 @@ -19,6 +19,7 @@ #if !defined(BOOST_NO_STD_LOCALE) # include <locale> // neeed for boost::io::imbue. #endif +#include <boost/io/detail/assert_convertible.hpp> #include <boost/io/detail/dispatch.hpp> #include <boost/io/detail/iterator_traits.hpp> #include <boost/io/detail/ios_traits.hpp> @@ -103,7 +104,7 @@ template<typename T> static void putback(T&, BOOST_IO_CHAR_TYPE(T)) - { BOOST_STATIC_ASSERT(false); } + { BOOST_IO_ASSERT_CONVERTIBLE(BOOST_IO_CATEGORY(T), peekable_tag); } }; ----------------------------------
The lib is now ready to be linked against, let's see some example programs:
To compile the bzip2 example (doc section 5.9.3.3) with gcc-3.4.1, you need to define the macro BOOST_IO_NO_FULL_SMART_ADAPTER_SUPPORT
error: expected `{' before ';' token
Could you try applying the following patch, and tell me if it works without defining BOOST_IO_NO_FULL_SMART_ADAPTER_SUPPORT? ---------------------------------- --- resolve.hpp 31 Aug 2004 18:02:51 -0000 1.4 +++ resolve.hpp 1 Sep 2004 01:13:32 -0000 @@ -35,7 +35,7 @@ BOOST_STATIC_ASSERT(!is_const<T>::value); #ifndef BOOST_IO_NO_FULL_SMART_ADAPTER_SUPPORT template<typename U> - struct get_result_type : U::result_type<Mode, Ch> { }; + struct get_result_type : U::template result_type<Mode, Ch> { }; #else template<typename U> struct get_result_type { ----------------------------------
The two builds of the program run as expected.
The gzip example (doc section 5.9.3.2) fails (using gcc-3.3.4 or gcc-3.4.1) with the errors :
<snip>
The first error (line 88) : the declaration of the constant 'unix' clashes with the platform-dependant macro 'unix' already defined by the compiler (see boost/config/select_platform_config.hp).
Ouch! I ran in to this with newline filter but forgot about it here. My inclination is to get rid of the 'os' namespace and prefix each constant with 'os_'.
The attached patch (gzip-hpp.patch) renames the constant to unix_os (not the best name, but it is not the question).
The second error is big collision around the name zlib_error : a class in the namespace boost::io (zlib.hpp), a constant in the namespace gzip (gzip.hpp) and a member function of the class gzip_error (gzip.hpp) The patch renames the member function to lib_error, it's not the best solution again, but it works.
Before I patch this, I'd like to understand the error a little better. It's hard to see how 'zlib_error_' could clash with anything. At any rate, I don't really care what the member variable is called, but I think I prefer 'zlib_error_code_'.
After a library rebuild, the second example compiles with both compilers, and runs without any problems.
Thank you for all your help!!
MD
Jonathan