Hi,

I have been testing out some example programs from the variant tutorial.
First, I ran across some errors in the code shown in the documentation
for the "first variant program."

(From GCC 2.95.2)
ex1.cpp:17: `which' undeclared (first use this function)
ex1.cpp:48: `a_printer' undeclared (first use this function)
ex1.cpp:48: `inst' undeclared (first use this function)
ex1.cpp:41: warning: unused variable `struct printer print'

In addition, compiling with Intel C++ 7.0 under strict ansi compliance
(-ansi) revealed the following nits as well:

aligned_storage.hpp(70):
error #308: type "boost::aligned_storage<size_, alignment_>::align_t [with
size_=28U, alignment_=4U]" is inaccessible
(I believe this is because the nested classes/unions have no special
access to private members of the enclosing class.
I added a friend declaration and union declaration to fix this.

boost/variant.hpp(1010): error #308: function "boost::variant<A, B, T0,
T1, T2, T3, T4, T5, T6, T7>::inactive_storage [with A=std::string, B=char
*, T0=int, T1=boost::detail::variant::void_,
T2=boost::detail::variant::void_, T3=boost::detail::variant::void_,
T4=boost::detail::variant::void_, T5=boost::detail::variant::void_,
T6=boost::detail::variant::void_, T7=boost::detail::variant::void_]" is
inaccessible
              new(target_.inactive_storage()) T(operand);
                          ^
(followed by many more of the same)
I added a class declaration prior to the friend class declaration for
the class "assign_into;" (on line 963 of variant.hpp)

aligned_storage.hpp:  warning about the change of sign on
alignment_ == -1.

I got this warning from Gnu C++ as well. I Added a cast to silence
compiler warnings:
alignment_ == (std::size_t)-1.

boost/variant.hpp(673): warning #191: type qualifier is meaningless on
cast type
          return const_cast<variant * const>(this)->active_storage();
I removed const from expression.


I've enclosed patches (unified diffs) for these.

Cheers,

ron

--- aligned_storage.hpp Thu Feb 13 17:05:18 2003
+++ aligned_storage.hpp.2       Fri Feb 21 09:45:31 2003
@@ -38,13 +38,13 @@
 
 template <
       std::size_t size_
-    , std::size_t alignment_ = -1
+    , std::size_t alignment_ = (std::size_t)-1
 >
 class aligned_storage
 {
 private:
     typedef typename mpl::apply_if_c<
-          alignment_ == -1
+          alignment_ == (std::size_t)-1
         , mpl::identity<detail::max_align>
         , type_with_alignment<alignment_>
         >::type align_t;
@@ -57,13 +57,15 @@
     BOOST_STATIC_CONSTANT(
           std::size_t
         , alignment = (
-              alignment_ == -1
+              alignment_ == (std::size_t)-1
             ? detail::alignment_of_max_align
             : alignment_
             )
         );
 
 private: // representation
+    union data_t;
+    friend union data_t;
     union data_t
     {
         char buf[size];
--- variant.hpp Fri Feb 14 15:38:38 2003
+++ variant.hpp.2       Fri Feb 21 09:51:38 2003
@@ -561,7 +561,7 @@
             , mpl::logical_and<
                   mpl::is_sequence<A>
                 , mpl::equal_to<
-                      detail::variant::mpl::guarded_size<A, min_list_size>
+                      mpl::guarded_size<A, min_list_size> 
                     , min_list_size
                     >
                 >
@@ -670,7 +670,7 @@
 
     const void* active_storage() const
     {
-        return const_cast<variant * const>(this)->active_storage();
+        return const_cast<variant *>(this)->active_storage();
     }
 
     void* inactive_storage()
@@ -960,6 +960,7 @@
     // given, maintaining the strong guarantee of exception safety.
     //
 
+    class assign_into;
     friend class assign_into;
 
     class assign_into
_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to