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;
