Boost logo

Boost :

From: Mark Rodgers (mark.rodgers_at_[hidden])
Date: 2000-11-07 03:05:49


Here are my comments.

Documentation:

- Needs boost header.

- The link to lexical_cast will need to come out until
  lexical_cast is accepted into Boost.

- The link to any.hpp at the top of the Synopsis would be broken
  if any.hpp lives in boost/, which is where it should indeed
  live.

- I find the documentation of the members very confusing. The
  member signatures are indented and not in bold, so they look
  like code snippets embedded in the text rather than headings.

any.hpp

- It might be nice to at least be able to compare anys for
  equality - equal if same type and contents equal. An ordering
  using type_info::before might even be possible. On the other
  hand, that puts additional constraints on ValueTypes. Not
  sure what's best. As it is, the void* conversion probably
  allows comparisons with somewhat surprising results.

- The conversion to void* is IMHO A Bad Thing. Please remove it
  and replace with

     bool empty() const { return content == 0; }

- I wonder why swap returns *this. The normal convention is for
  swap functions to return void.

- I think you need to either specialise std::swap or provide a
  swap function in boost::, depending on your preference. I think
  the jury is out on what is the correct thing to do for non-
  templates (I think probably the former).

- There are two distinct bugs being worked around with MSVC_INCLUDE
  and MSVC_EXCLUDE. GCC shares one of them, so it is not possible
  to make any work for GCC just by defining COMPILING_MSVC (which
  you should anyway integrate into config.hpp as noted in future
  directions). By commenting out the MSVC_INCLUDE on the copy
  constructor and assignment operator, and by defining COMPILING_MSVC
  since GCC shares the inability to write object.memfun<foo>(), I
  was able to make this work with GCC.

- I wonder if it would be a good idea to provide a pair of to_ptr
  functions for MSVC's and GCC's benefit?

    template <typename ValueType>
    ValueType *to_ptr(any &a)
      { return a.to_ptr MSVC_EXCLUDE(<ValueType>)(
                MSVC_INCLUDE(static_cast<ValueType *>(0))); }

  and similar for const?

      boost::any a(23);
      int *p = to_ptr(a);

  seems a lot nicer than

      boost::any a(23);
      int *p = a.to_ptr(static_cast<int *>(0));

test-any.cpp:

- Please change
    #include "any.hpp"
  to
    #include "boost/any.hpp"

- The test_comparisons function is very misleading since it gives
  the impression that anys can be compared sensibly. Comparing
  0 < &typeid(void) seems particularly unuseful.

test.hpp:

- Needs copyright notice.

- I agree with Jeremy - using string as a template parameter is
  confusing.


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk