Move generate_default_constructor call into generate_struct_definition

This makes sure that helper structs like _args and _result also have
their default constructors defined.
diff --git a/compiler/cpp/src/thrift/generate/t_cpp_generator.cc b/compiler/cpp/src/thrift/generate/t_cpp_generator.cc
index a77982f..ccb79bc 100644
--- a/compiler/cpp/src/thrift/generate/t_cpp_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_cpp_generator.cc
@@ -143,7 +143,8 @@
                                   std::ostream& force_cpp_out,
                                   t_struct* tstruct,
                                   bool setters = true,
-                                  bool is_user_struct = false);
+                                  bool is_user_struct = false,
+                                  bool pointers = false);
   void generate_copy_constructor(std::ostream& out, t_struct* tstruct, bool is_exception);
   void generate_move_constructor(std::ostream& out, t_struct* tstruct, bool is_exception);
   void generate_default_constructor(std::ostream& out, t_struct* tstruct, bool is_exception);
@@ -916,7 +917,7 @@
  */
 void t_cpp_generator::generate_cpp_struct(t_struct* tstruct, bool is_exception) {
   generate_struct_declaration(f_types_, tstruct, is_exception, false, true, true, true, true);
-  generate_struct_definition(f_types_impl_, f_types_impl_, tstruct, true, true);
+  generate_struct_definition(f_types_impl_, f_types_impl_, tstruct, true, true, false);
 
   std::ostream& out = (gen_templates_ ? f_types_tcc_ : f_types_impl_);
   generate_struct_reader(out, tstruct);
@@ -925,7 +926,6 @@
   if (!gen_no_default_operators_) {
     generate_equality_operator(f_types_impl_, tstruct);
   }
-  generate_default_constructor(f_types_impl_, tstruct, is_exception);
   generate_copy_constructor(f_types_impl_, tstruct, is_exception);
   if (gen_moveable_) {
     generate_move_constructor(f_types_impl_, tstruct, is_exception);
@@ -1408,7 +1408,8 @@
                                                  ostream& force_cpp_out,
                                                  t_struct* tstruct,
                                                  bool setters,
-                                                 bool is_user_struct) {
+                                                 bool is_user_struct,
+                                                 bool pointers) {
   // Get members
   vector<t_field*>::const_iterator m_iter;
   const vector<t_field*>& members = tstruct->get_members();
@@ -1423,6 +1424,11 @@
     force_cpp_out << indent() << "}" << endl << endl;
   }
 
+  if (!pointers)
+  {
+    generate_default_constructor(out, tstruct, false);
+  }
+
   // Create a setter function for each field
   if (setters) {
     for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
@@ -2058,9 +2064,10 @@
     generate_struct_definition(out, f_service_, ts, false);
     generate_struct_reader(out, ts);
     generate_struct_writer(out, ts);
+
     ts->set_name(tservice->get_name() + "_" + (*f_iter)->get_name() + "_pargs");
     generate_struct_declaration(f_header_, ts, false, true, false, true);
-    generate_struct_definition(out, f_service_, ts, false);
+    generate_struct_definition(out, f_service_, ts, false, false, true);
     generate_struct_writer(out, ts, true);
     ts->set_name(name_orig);
 
@@ -3508,7 +3515,7 @@
 
   result.set_name(tservice->get_name() + "_" + tfunction->get_name() + "_presult");
   generate_struct_declaration(f_header_, &result, false, true, true, gen_cob_style_);
-  generate_struct_definition(out, f_service_, &result, false);
+  generate_struct_definition(out, f_service_, &result, false, false, true);
   generate_struct_reader(out, &result, true);
   if (gen_cob_style_) {
     generate_struct_writer(out, &result, true);