$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: François Dumont (francois.cppdevs_at_[hidden])
Date: 2005-08-30 15:39:18
Here are several patches to improve portability for this library:
- options_description.hpp: The m_default_line_length is for me an 
implementation detail. As static constant are well known as not being 
portable I propose to use the dedicated BOOST_STATIC_CONSTANT macro in 
this case. I also move it to the private section as I think it is the 
place it must be but of course it do not change the portability aspect 
if it is retore back to the public section.
- options_description.cpp: C++ Standard library implementors needs 
compiler partial template specialization support in order to offer the 
Standard reverse_iterator definition. Using reverse_iterator in this 
source introduce a major limitation in terms of compilers able to 
support it. As the only thing you need is a reverse_iterator on 
string::const_iterator the simplest solution is to use the 
string::const_reverse_iterator typedef. This way you simply rely on 
Standard library quality, I expect that all compilers with partial 
template specialization have a Standard string coming with a 
const_reverse_iterator typedef.
- variables_map.cpp: A classic for loop internal variable problem, i is 
defined 2 times with a different type in 2 different for loop. I fix it 
by using an iterator approach to enumerate the desc.options() container.
Thanks to those patches I build the lib with the msvc-stlport toolset 
with no problem.
Bests
*** options_description.hpp.orig	Tue Aug 30 07:34:41 2005
--- options_description.hpp	Tue Aug 30 21:05:22 2005
***************
*** 152,160 ****
          @sa option_description
      */
      class BOOST_PROGRAM_OPTIONS_DECL options_description {
      public:
-         static const unsigned m_default_line_length = 80;
-         
          /** Creates the instance. */
          options_description(unsigned line_length = m_default_line_length);
          /** Creates the instance. The 'caption' parameter gives the name of
--- 152,159 ----
          @sa option_description
      */
      class BOOST_PROGRAM_OPTIONS_DECL options_description {
+         BOOST_STATIC_CONSTANT(unsigned, m_default_line_length = 80);
      public:
          /** Creates the instance. */
          options_description(unsigned line_length = m_default_line_length);
          /** Creates the instance. The 'caption' parameter gives the name of
*** options_description.cpp.orig	Tue Aug 30 07:42:10 2005
--- options_description.cpp	Tue Aug 30 07:43:28 2005
***************
*** 375,382 ****
                      {
                          // find last ' ' in the second half of the current paragraph line
                          string::const_iterator last_space =
!                             find(reverse_iterator<string::const_iterator>(line_end - 1),
!                                  reverse_iterator<string::const_iterator>(line_begin - 1),
                                   ' ')
                              .base();
                  
--- 375,382 ----
                      {
                          // find last ' ' in the second half of the current paragraph line
                          string::const_iterator last_space =
!                             find(string::const_reverse_iterator(line_end - 1),
!                                  string::const_reverse_iterator(line_begin - 1),
                                   ' ')
                              .base();
                  
*** variables_map.cpp.orig	Tue Aug 30 07:46:25 2005
--- variables_map.cpp	Tue Aug 30 07:48:48 2005
***************
*** 80,92 ****
          }
          xm.m_final.insert(new_final.begin(), new_final.end());
  
-         
-         
          // Second, apply default values.
!         const vector<shared_ptr<option_description> >& all = desc.options();
!         for(unsigned i = 0; i < all.size(); ++i)
          {
!             const option_description& d = *all[i];
              string key = d.key("");
              // FIXME: this logic relies on knowledge of option_description
              // internals.
--- 80,91 ----
          }
          xm.m_final.insert(new_final.begin(), new_final.end());
  
          // Second, apply default values.
!         vector<shared_ptr<option_description> >::const_iterator optIt(desc.options().begin()),
!                                                                 optItEnd(desc.options().end());
!         for (; optIt != optItEnd; ++optIt)
          {
!             const option_description& d = *(*optIt);
              string key = d.key("");
              // FIXME: this logic relies on knowledge of option_description
              // internals.