Opened 10 years ago

Closed 10 years ago

Last modified 10 years ago

#7079 closed Bugs (fixed)

addressof a boost::function and SolarisStudio compiler

Reported by: Luke Elliott <lukester_null@…> Owned by: viboes
Milestone: Boost 1.54.0 Component: utility
Version: Boost 1.50.0 Severity: Problem
Keywords: Cc:

Description

This:

#include <boost/utility/addressof.hpp>
#include <boost/function.hpp>

int main()
{
    boost::function<void (void)> pFunc;
    boost::addressof(pFunc);
    return 0;
}

fails with:

CC address-of.cpp -I/path/to/boost -library=stlport4 ".../addressof.hpp", line 61: Error: Could not find a match for boost::detail::addressof_impl<boost::function<void()>>::f(boost::detail::addr_impl_ref<boost::function<void()>>, int) needed in boost::addressof<boost::function<void()>>(boost::function<void()>&). "address-of.cpp", line 8: Where: While instantiating "boost::addressof<boost::function<void()>>(boost::function<void()>&)". "address-of.cpp", line 8: Where: Instantiated from non-template code.

Handily the existing workaround in addressof.hpp fixes it if extended to check for Sun...

template<class T> T * addressof( T & v )
{
#if (defined( __BORLANDC__ ) && BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT( 0x610 ) ) ) || defined( __SUNPRO_CC )

    return Boost::detail::addressof_impl<T>::f( v, 0 );

#else

    return Boost::detail::addressof_impl<T>::f( Boost::detail::addr_impl_ref<T>( v ), 0 );

#endif
}

Compiler info:

CC -V
CC: Sun C++ 5.12 SunOS_i386 2011/11/16

I'm not sure if this is really the correct solution (addressof_test passes), but I hope it is of some use!

Regards

Luke Elliott.

Change History (4)

comment:1 by Matt Stupple <matt_stupple@…>, 10 years ago

Can I 'vote' for this fix to be integrated into the main Boost release? I hit exactly the same error with Solaris Studio 12.3 (CC 5.12) and the suggested solution works perfectly for me.

comment:2 by viboes, 10 years ago

Owner: changed from No-Maintainer to viboes
Status: newassigned

comment:3 by viboes, 10 years ago

Resolution: fixed
Status: assignedclosed

(In [83524]) Utility/address_off: fix #7079.

comment:4 by viboes, 10 years ago

Milestone: To Be DeterminedBoost 1.54.0
Note: See TracTickets for help on using tickets.