Factor out duplicated code into helper function
diff --git a/compiler/cpp/src/thrift/generate/t_cpp_generator.cc b/compiler/cpp/src/thrift/generate/t_cpp_generator.cc
index fecfa4b..a77982f 100644
--- a/compiler/cpp/src/thrift/generate/t_cpp_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_cpp_generator.cc
@@ -302,6 +302,12 @@
    */
   bool is_struct_storage_not_throwing(t_struct* tstruct) const;
 
+  /**
+   * Helper function to determine whether any of the members of our struct
+   * has a default value.
+   */
+  bool has_field_with_default_value(t_struct* tstruct);
+
 private:
   /**
    * Returns the include prefix to use for a file generated by program, or the
@@ -968,6 +974,24 @@
   out << "\n";
 }
 
+bool t_cpp_generator::has_field_with_default_value(t_struct* tstruct)
+{
+  vector<t_field*>::const_iterator m_iter;
+  const vector<t_field*>& members = tstruct->get_members();
+
+  for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
+    t_type* t = get_true_type((*m_iter)->get_type());
+    if (is_reference(*m_iter) || t->is_string()) {
+      t_const_value* cv = (*m_iter)->get_value();
+      if (cv != nullptr) {
+        return true;
+      }
+    }
+  }
+
+  return false;
+}
+
 void t_cpp_generator::generate_default_constructor(ostream& out,
                                                    t_struct* tstruct,
                                                    bool is_exception) {
@@ -975,18 +999,7 @@
   vector<t_field*>::const_iterator m_iter;
   const vector<t_field*>& members = tstruct->get_members();
 
-  // TODO(barth) this is duplicated from generate_struct_declaration
-  bool has_default_value = false;
-  for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
-    t_type* t = get_true_type((*m_iter)->get_type());
-    if (is_reference(*m_iter) || t->is_string()) {
-      t_const_value* cv = (*m_iter)->get_value();
-      if (cv != nullptr) {
-        has_default_value = true;
-        break;
-      }
-    }
-  }
+  bool has_default_value = has_field_with_default_value(tstruct);
 
   std::string clsname_ctor = tstruct->get_name() + "::" + tstruct->get_name() + "()";
   indent(out) << clsname_ctor << (has_default_value ? "" : " noexcept");
@@ -1271,18 +1284,8 @@
                   << endl;
     }
 
-    bool has_default_value = false;
-    for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
-      t_type* t = get_true_type((*m_iter)->get_type());
-      if (is_reference(*m_iter) || t->is_string()) {
-        t_const_value* cv = (*m_iter)->get_value();
-        if (cv != nullptr) {
-          has_default_value = true;
-          break;
-        }
-      }
-    }
-
+    bool has_default_value = has_field_with_default_value(tstruct);
+    
     // Default constructor
     std::string clsname_ctor = tstruct->get_name() + "()";
     indent(out) << clsname_ctor << (has_default_value ? "" : " noexcept") << ";" << endl;