|
Boost : |
From: Alexander Nasonov (alnsn-mycop_at_[hidden])
Date: 2003-05-21 03:21:12
This little program doesn't work:
#include <boost/type_traits.hpp>
struct Poly { virtual int foo() = 0; };
int main()
{
boost::is_polymorphic<Poly>::value;
}
[alnsn_at_sat-pc test]$ icc -I $BOOST_ROOT is_polymorphic.cpp
is_polymorphic.cpp
/usr/local/src/boost/boost/type_traits/is_polymorphic.hpp(39): error: return
type is not identical to nor covariant with return type "int" of overridden
virtual function function "Poly::foo"
virtual void foo();
^
detected during:
instantiation of class
"boost::detail::is_polymorphic_imp1<T>::d2 [with T=Poly]" at line 44
instantiation of class "boost::detail::is_polymorphic_imp1<T>
[with T=Poly]" at line 79
instantiation of class "boost::detail::is_polymorphic_imp<T>
[with T=Poly]" at line 84
instantiation of class "boost::is_polymorphic<T> [with T=Poly]"
at line 7 of "is_polymorphic.cpp"
compilation aborted for is_polymorphic.cpp (code 2)
It has a simple workaround though. Virtual function foo should have unique
signature. One argument of unique type is enough:
// File boost/type_traits/is_polymorphic.hpp
// ...
template <class T>
struct is_polymorphic_imp1
{
// ...
struct d2 : public ncvT
{
d2();
virtual ~d2()throw();
# ifndef BOOST_MSVC
// for some reason this messes up VC++ when T has virtual bases:
struct unique {};
virtual void foo(unique);
# endif
char padding[256];
};
// ...
};
-- Alexander Nasonov Remove minus and all between minus and at from my e-mail for timely response
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk