#7079 closed Bugs (fixed)
addressof a boost::function and SolarisStudio compiler
| Reported by: | 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 , 10 years ago
comment:2 by , 10 years ago
| Owner: | changed from to |
|---|---|
| Status: | new → assigned |
comment:3 by , 10 years ago
| Resolution: | → fixed |
|---|---|
| Status: | assigned → closed |
comment:4 by , 10 years ago
| Milestone: | To Be Determined → Boost 1.54.0 |
|---|

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.