$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
Subject: [boost] sp_convertible<> on MSVC10
From: Zachary Turner (divisortheory_at_[hidden])
Date: 2010-02-19 09:41:57
I'm using 1.42, not trunk, so I don't know if this has already been
addressed, but sp_convertible fails with some errors for me.
2>C:\dev\boost\1.42.0\boost/smart_ptr/detail/sp_convertible.hpp(49): error
C2070: 'void': illegal sizeof operand
2>
 C:\dev\boost\1.42.0\boost/smart_ptr/detail/sp_convertible.hpp(68) : see
reference to class template instantiation
'boost::detail::sp_convertible<Y,T>' being compiled
2>          with
2>          [
2>              Y=error_info_tag_t,
2>              T=boost::exception_detail::error_info_base
2>          ]
2>          C:\dev\boost\1.42.0\boost/exception/info.hpp(159) : see
reference to class template instantiation
'boost::detail::sp_enable_if_convertible<Y,T>' being compiled
2>          with
2>          [
2>              Y=error_info_tag_t,
2>              T=boost::exception_detail::error_info_base
2>          ]
2>
 C:\dev\boost\1.42.0\boost/exception/detail/exception_ptr.hpp(170) : see
reference to function template instantiation 'const E &boost::operator
<<<boost::unknown_exception,boost::tag_original_exception_type,const
type_info*>(const E &,const boost::error_info<Tag,T> &)' being compiled
2>          with
2>          [
2>              E=boost::unknown_exception,
2>              Tag=boost::tag_original_exception_type,
2>              T=const type_info *
2>          ]
2>
 C:\dev\boost\1.42.0\boost/exception/detail/exception_ptr.hpp(137) : see
reference to function template instantiation 'void
boost::unknown_exception::add_original_type<std::exception>(const E &)'
being compiled
2>          with
2>          [
2>              E=std::exception
2>          ]
2>C:\dev\boost\1.42.0\boost/exception/info.hpp(159): error C2664:
'boost::exception_detail::error_info_container::set' : cannot convert
parameter 1 from 'boost::shared_ptr<T>' to 'const boost::shared_ptr<T> &'
2>          with
2>          [
2>              T=error_info_tag_t
2>          ]
2>          and
2>          [
2>              T=boost::exception_detail::error_info_base
2>          ]
2>          Reason: cannot convert from 'boost::shared_ptr<T>' to 'const
boost::shared_ptr<T>'
2>          with
2>          [
2>              T=error_info_tag_t
2>          ]
2>          and
2>          [
2>              T=boost::exception_detail::error_info_base
2>          ]
2>          No user-defined-conversion operator available that can perform
this conversion, or the operator cannot be called
The line it's pointing to is this:
    enum _vt { value = sizeof( f( static_cast<Y*>(0) ) ) == sizeof(yes) };
and in particular it's having a problem determining the return type of f(
static_cast<Y*>(0) ).  It's thinking that whatever overload it's finding for
f() here returns type void.  Which doesn't make sense neither one returns
void.
Any ideas?
Zach