|
Boost : |
Subject: [boost] [exception] [shared_ptr] ADL problem with msvc 10
From: Steven Watanabe (watanabesj_at_[hidden])
Date: 2010-04-16 19:29:53
AMDG
I just tried to compile the following
#include <boost/exception_ptr.hpp>
void f() {}
msvc 10 complains,
1>c:\boost\trunk\boost\smart_ptr\detail\sp_convertible.hpp(48): error
C2660: 'f' : function does not take 1 arguments
1> c:\boost\trunk\boost\smart_ptr\detail\sp_convertible.hpp(66)
: see reference to class template instantiation
'boost::detail::sp_convertible<Y,T>' being compiled
1> with
1> [
1> Y=error_info_tag_t,
1> T=boost::exception_detail::error_info_base
1> ]
1> c:\boost\trunk\boost\exception\info.hpp(171) : see reference
to class template instantiation
'boost::detail::sp_enable_if_convertible<Y,T>' being compiled
1> with
1> [
1> Y=error_info_tag_t,
1> T=boost::exception_detail::error_info_base
1> ]
1> c:\boost\trunk\boost\exception\info.hpp(188) : see reference
to function template instantiation 'const E
&boost::exception_detail::set_info<E,boost::tag_original_exception_type,const
type_info*>(const E &,const boost::error_info<Tag,T> &)' being compiled
1> with
1> [
1> E=boost::unknown_exception,
1> Tag=boost::tag_original_exception_type,
1> T=const type_info *
1> ]
1> c:\boost\trunk\boost\exception\detail\exception_ptr.hpp(132)
: see reference to function template instantiation 'const
boost::unknown_exception &boost::operator
<<<boost::unknown_exception,boost::tag_original_exception_type,const
type_info*>(const E &,const boost::error_info<Tag,T> &)' being compiled
1> with
1> [
1> E=boost::unknown_exception,
1> Tag=boost::tag_original_exception_type,
1> T=const type_info *
1> ]
1> c:\boost\trunk\boost\exception\detail\exception_ptr.hpp(111)
: see reference to function template instantiation 'void
boost::unknown_exception::add_original_type<std::exception>(const E &)'
being compiled
1> with
1> [
1> E=std::exception
1> ]
This appears to be because type_info is defined in the global namespace,
so ADL for boost::error_info<boost::tag_original_exception_type, const
type_info *>
picks up the global f. I don't have a fix for this yet.
In Christ,
Steven Watanabe
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk