@@ -1987,19 +1987,29 @@ def parse_header(
19871987 if doc_add :
19881988 doc_add = f"\n { doc_add } "
19891989
1990- hctx .template_instances .append (
1991- TemplateInstanceContext (
1992- scope_var = visitor ._get_module_var (tmpl_data ),
1993- var_name = f"tmplCls{ i } " ,
1994- py_name = k ,
1995- full_cpp_name_identifier = qualname ,
1996- binder_typename = f"bind_{ qualname } _{ i } " ,
1997- params = tmpl_data .params ,
1998- header_name = f"{ qualname } .hpp" ,
1999- doc_set = visitor ._quote_doc (tmpl_data .doc ),
2000- doc_add = visitor ._quote_doc (doc_add ),
2001- )
1990+ tctx = TemplateInstanceContext (
1991+ scope_var = visitor ._get_module_var (tmpl_data ),
1992+ var_name = f"tmplCls{ i } " ,
1993+ py_name = k ,
1994+ full_cpp_name_identifier = qualname ,
1995+ binder_typename = f"bind_{ qualname } _{ i } " ,
1996+ params = tmpl_data .params ,
1997+ header_name = f"{ qualname } .hpp" ,
1998+ doc_set = visitor ._quote_doc (tmpl_data .doc ),
1999+ doc_add = visitor ._quote_doc (doc_add ),
20022000 )
2001+ hctx .template_instances .append (tctx )
2002+
2003+ # Ensure that template instances are created in class order if the
2004+ # template class is in this header file
2005+ # - not matching here is not an error
2006+ qualname_match = tmpl_data .qualname .lstrip (":" )
2007+ for cctx in hctx .classes :
2008+ if cctx .dep_cpp_name .lstrip (":" ) == qualname_match :
2009+ assert cctx .template
2010+ tctx .matched = True
2011+ cctx .template .instances .append (tctx )
2012+ break
20032013
20042014 for param in tmpl_data .params :
20052015 visitor ._add_user_type_caster (param )
0 commit comments