Boost logo

Boost :

From: Daniel Wallin (dalwan01_at_[hidden])
Date: 2006-03-18 06:41:24


  #include <boost/bind/apply.hpp>
  #include <boost/optional.hpp>

Results in:

dev/boost/boost/optional/optional.hpp: In member function 'void
boost::optional_detail::optional_bas
e<T>::construct(const Expr&, const boost::in_place_factory_base*)':
dev/boost/boost/optional/optional.hpp:309: error: invalid use of 'struct
boost::apply<T>'

On GCC4.0.2. The offending line is:

  factory.BOOST_NESTED_TEMPLATE apply<value_type>(m_storage.address()) ;

A simple fix is to move the apply() call out of the boost namespace. The
attached patch fixes the problem. OK to commit?

-- 
Daniel Wallin

Index: optional.hpp
===================================================================
RCS file: /cvsroot/boost/boost/boost/optional/optional.hpp,v
retrieving revision 1.9
diff -u -r1.9 optional.hpp
--- optional.hpp 10 Feb 2006 20:52:25 -0000 1.9
+++ optional.hpp 18 Mar 2006 11:40:32 -0000
@@ -76,6 +76,16 @@
 #define BOOST_OPTIONAL_WEAK_OVERLOAD_RESOLUTION
 #endif
 
+namespace boost_optional_construct
+{
+
+ template <class T, class Factory>
+ void construct(Factory const& factory, void* address)
+ {
+ factory.BOOST_NESTED_TEMPLATE apply<T>(address);
+ }
+
+} // namespace boost_optional_construct
 
 namespace boost {
 
@@ -295,7 +305,9 @@
     void construct ( Expr const& factory, in_place_factory_base const* )
      {
        BOOST_STATIC_ASSERT ( ::boost::mpl::not_<is_reference_predicate>::value ) ;
- factory.BOOST_NESTED_TEMPLATE apply<value_type>(m_storage.address()) ;
+ boost_optional_construct::construct<value_type>(
+ factory, m_storage.address()
+ );
        m_initialized = true ;
      }
 


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