
16 Oct
2012
16 Oct
'12
7:31 p.m.
typedef mpl::vector< pointer<>, same_type<pointer<>::element_type,_a >, relaxed_match, has_foo<void()> > PointeeConcept;
// will not compile, shared_ptr<Pointee> has no foo... boost::shared_ptr<Pointee> p (new Pointee) ; any<PointeeConcept> ap (p); ap.foo();
The placeholder _self maps to shared_ptr<Pointee> and the placeholder _a maps to Pointee. has_foo<void()> is actually has_foo<void(), _self> because of the default argument. This says that shared_ptr<Pointee> has a member called foo. What you really want is has_foo<void(), _a> to say that foo is a member of Pointee.
In Christ, Steven Watanabe
Ok, got it. I made a second mistake, I need (*ap).foo(); Thanks, Christophe