@@ -14,16 +14,16 @@ struct FooT : public builder::custom_type<> {
1414};
1515
1616template <typename T>
17- struct BarT : public builder ::custom_type<T > {
17+ struct BarT : public builder ::custom_type<> {
1818 static constexpr const char *type_name = " BarT" ;
19- dyn_var<int > my_member = as_member(" my_member" );
20- dyn_var<int > second_member = as_member(" second_member" );
19+ dyn_var<T > my_member = as_member(" my_member" );
20+ dyn_var<T > second_member = as_member(" second_member" );
2121};
2222
2323template <typename T1, typename T2>
2424struct CarT : public builder ::custom_type<T1, T2> {
2525 static constexpr const char *type_name = " CarT" ;
26- dyn_var<int > my_member = as_member(" my_member" );
26+ dyn_var<T2 > my_member = as_member(" my_member" );
2727};
2828
2929static void bar (void ) {
@@ -42,8 +42,15 @@ static void bar(void) {
4242
4343int main (int argc, char *argv[]) {
4444 builder::builder_context context;
45- auto ast = context.extract_ast_from_function (bar);
45+ auto ast = context.extract_function_ast (bar, " my_bar " );
4646 ast->dump (std::cout, 0 );
47+
48+ block::c_code_generator::generate_struct_decl<dyn_var<FooT>>(std::cout);
49+ block::c_code_generator::generate_struct_decl<dyn_var<BarT<int >>>(std::cout);
50+
51+ // Don't do this because this has a template in the generated type
52+ // block::c_code_generator::generate_struct_decl<dyn_var<CarT<int, BarT<float>>>>(std::cout);
53+
4754 block::c_code_generator::generate_code (ast, std::cout, 0 );
4855 return 0 ;
4956}
0 commit comments