
Try not to reply to digests: we lose the Subject at minimum. Jared McIntyre wrote:
Double check that a is polymorphic - that is, that it has at least one virtual function. Then get back to us.
Yup, the destructors are virtual (and dynamic_cast is working in both directions). However, it works now (see later comment).
nope, its correct. This is a little known quirk of C++ syntax. Your second version won't compile on the most conforming compilers.
Nifty. I swear that didn't compile when I used it on Friday, but now it does. Now that I have changed it to that format, ar.template register_type<derived_one>(), it works. Out of curiosity, what is the difference between calling it that way and calling ar.register_type<derived_one>()? I've not seen that type of format and would be interested in learning more about it.
Here's a hint: const int i = 2742; struct foo1 { int bar; }; struct foo2 { template <int sz> int bar(int i) {return sz + i;} }; // unused template param template <int sz> void fn(foo1& f1, foo2& f2) { bool stupidbool = f1.bar<sz>(0); int stupidint = f2.bar<sz>(0); } int main() { fn<i>(foo1(), foo2()); }