I have been looking at the source in
class.c:
clone_function_decl()
clone_constructors_and_destructors()
pt.c:
check_explicit_specialization()
In pt.c: check_explicit_specialization() it specifically requests that
the clone function of a specialised constructor NOT add the new clone to
the classes method vector.
Does this have something to do with the comment in the code in that by
not adding a method to the types method vector it somehow defines the
constructor as being "not in charge"?
I thought that an "in charge" or not "in charge" constructor was defined
using some other means than by wether or not the constructor is in the
types method vector.
I can now go ahead and hook into the clone method to gather the
information i need, however it is a bit hackish and I am still trying to
understand why the specialisation of a template constructor does not get
added to the methods vector.
Thanks for any information in advance.
Brendon.
The appropiate few lines of code in the pt.c:
check_explicit_specialization() file look as shown below:
else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
/* This is indeed a specialization. In case of constructors
and destructors, we need in-charge and not-in-charge
versions in V3 ABI. */
clone_function_decl (decl, /*update_method_vec_p=*/0);
/* Register this specialization so that we can find it
again. */
decl = register_specialization (decl, gen_tmpl, targs);