Simplify default constructors for absl::Cord and internal classes

Removes an unidiomatic bifurcation between value-initialization and default-initialization, which hampers readability.

PiperOrigin-RevId: 972169356
Change-Id: I9bf5c77a7b885148939929a49b0f1c77ae94994c
diff --git a/absl/strings/cord.cc b/absl/strings/cord.cc
index 5827d89..6d9dd10 100644
--- a/absl/strings/cord.cc
+++ b/absl/strings/cord.cc
@@ -301,8 +301,7 @@
 // --------------------------------------------------------------------
 // Constructors and destructors
 
-Cord::Cord(absl::string_view src, MethodIdentifier method)
-    : contents_(InlineData::kDefaultInit) {
+Cord::Cord(absl::string_view src, MethodIdentifier method) {
   const size_t n = src.size();
   if (n <= InlineRep::kMaxInline) {
     contents_.set_data(src.data(), n);
@@ -313,7 +312,7 @@
 }
 
 template <typename T, Cord::EnableIfString<T>>
-Cord::Cord(T&& src) : contents_(InlineData::kDefaultInit) {
+Cord::Cord(T&& src) {
   if (src.size() <= InlineRep::kMaxInline) {
     contents_.set_data(src.data(), src.size());
   } else {
@@ -594,7 +593,7 @@
     size_t cur_size = contents_.inline_size();
     if (cur_size + src.size() <= InlineRep::kMaxInline) {
       // Use embedded storage.
-      InlineData data;
+      InlineData data{};
       data.set_inline_size(cur_size + src.size());
       memcpy(data.as_chars(), src.data(), src.size());
       memcpy(data.as_chars() + src.size(), contents_.data(), cur_size);
@@ -623,7 +622,7 @@
   assert(src.size() <= cord_internal::kMaxFlatLength);
   if (contents_.remaining_inline_capacity() >= src.size()) {
     const size_t cur_size = contents_.inline_size();
-    InlineData data;
+    InlineData data{};
     data.set_inline_size(cur_size + src.size());
     memcpy(data.as_chars(), src.data(), src.size());
     memcpy(data.as_chars() + src.size(), contents_.data(), cur_size);
diff --git a/absl/strings/cord.h b/absl/strings/cord.h
index fad5d97..cbba501 100644
--- a/absl/strings/cord.h
+++ b/absl/strings/cord.h
@@ -920,8 +920,7 @@
     static constexpr unsigned char kMaxInline = cord_internal::kMaxInline;
     static_assert(kMaxInline >= sizeof(absl::cord_internal::CordRep*));
 
-    constexpr InlineRep() : data_() {}
-    explicit InlineRep(InlineData::DefaultInitType init) : data_(init) {}
+    InlineRep() = default;
     InlineRep(const InlineRep& src);
     InlineRep(InlineRep&& src);
     InlineRep& operator=(const InlineRep& src);
@@ -1181,8 +1180,7 @@
                                      CordRep* absl_nullable rep)
     : data_(sv, rep) {}
 
-inline Cord::InlineRep::InlineRep(const Cord::InlineRep& src)
-    : data_(InlineData::kDefaultInit) {
+inline Cord::InlineRep::InlineRep(const Cord::InlineRep& src) {
   if (CordRep* tree = src.tree()) {
     EmplaceTree(CordRep::Ref(tree), src.data_,
                 CordzUpdateTracker::kConstructorCord);
@@ -1364,7 +1362,7 @@
   ResetToEmpty();
 }
 
-constexpr inline Cord::Cord() noexcept {}
+constexpr inline Cord::Cord() noexcept : contents_() {}
 
 inline Cord::Cord(absl::string_view src)
     : Cord(src, CordzUpdateTracker::kConstructorString) {}
diff --git a/absl/strings/internal/cord_internal.h b/absl/strings/internal/cord_internal.h
index cf45907..8a7e85f 100644
--- a/absl/strings/internal/cord_internal.h
+++ b/absl/strings/internal/cord_internal.h
@@ -472,9 +472,6 @@
 
 class ABSL_ATTRIBUTE_TRIVIAL_ABI InlineData {
  public:
-  // DefaultInitType forces the use of the default initialization constructor.
-  enum DefaultInitType { kDefaultInit };
-
   // kNullCordzInfo holds the little endian representation of intptr_t(1)
   // This is the 'null' / initial value of 'cordz_info'. The null value
   // is specifically big endian 1 as with 64-bit pointers, the last
@@ -488,8 +485,6 @@
 
   InlineData() = default;
 
-  explicit InlineData(DefaultInitType) noexcept : rep_(kDefaultInit) {}
-
   explicit InlineData(CordRep* rep) noexcept : rep_(rep) {
     ABSL_ASSERT(rep != nullptr);
   }
@@ -657,16 +652,16 @@
   struct Rep {
     // See cordz_info_t for forced alignment and size of `cordz_info` details.
     struct AsTree {
+      AsTree() = default;
+
       explicit constexpr AsTree(absl::cord_internal::CordRep* tree)
-          : rep(tree) {}
-      cordz_info_t cordz_info = kNullCordzInfo;
+          : cordz_info(kNullCordzInfo), rep(tree) {}
+
+      cordz_info_t cordz_info;
       absl::cord_internal::CordRep* rep;
     };
 
-    explicit Rep(DefaultInitType) {}
-    constexpr Rep() : data{0} {}
-    constexpr Rep(const Rep&) = default;
-    constexpr Rep& operator=(const Rep&) = default;
+    Rep() = default;
 
     explicit constexpr Rep(CordRep* rep) : as_tree(rep) {}
 
diff --git a/absl/strings/internal/cordz_info_statistics_test.cc b/absl/strings/internal/cordz_info_statistics_test.cc
index 859bb20..fbd4b0e 100644
--- a/absl/strings/internal/cordz_info_statistics_test.cc
+++ b/absl/strings/internal/cordz_info_statistics_test.cc
@@ -444,7 +444,7 @@
         // Track 0 - 2 cordz infos at a time, providing permutations of 0, 1
         // and 2 CordzHandle and CordzInfo queues being active, with plenty of
         // 'empty to non empty' transitions.
-        InlineData cords[2];
+        InlineData cords[2] = {};
         std::minstd_rand gen;
         std::uniform_int_distribution<int> coin_toss(0, 1);
         std::uniform_int_distribution<int> dice_roll(1, 6);