From: David Abrahams (dave_at_[hidden])
Date: 2004-06-17 07:33:32
"John Maddock" <john_at_[hidden]> writes:
>> some code:
>> template <typename DerivedT>
>> class A
>> BOOST_STATIC_ASSERT((boost::is_convertible<A<DerivedT>*, B*>::value));
>> class B : public A<B>
>> I want to check if the template parameter really specifies a derived type.
>> But the assert is always false.
>> How can i solve this?
> I think your code should be:
> template <typename DerivedT>
> class A
> // this should work as well:
> class B : public A<B>
> However, the static asserts still always get triggered, and I'm not sure
> why: any language lawyers understand this?
Because B is an incomplete class in A's body, so the inheritance is
invisible. It's complete inside of A's member functions; you could
do the assert there...
-- Dave Abrahams Boost Consulting http://www.boost-consulting.com
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk