From b881a863082c5fdfc2684d259cc1bd21fb608731 Mon Sep 17 00:00:00 2001 From: Gunhan Gulsoy Date: Thu, 16 Jan 2020 09:55:14 -0800 Subject: [PATCH] Avoid designated initializers, as MSVC complains about them. PiperOrigin-RevId: 290086999 Change-Id: I76604522b0f618f1ea54cabebb3e29663b751b1a --- tensorflow/core/kernels/tensor_cord.h | 29 ++++++++++++++++----------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/tensorflow/core/kernels/tensor_cord.h b/tensorflow/core/kernels/tensor_cord.h index 4d2e1de9324..d091212e79a 100644 --- a/tensorflow/core/kernels/tensor_cord.h +++ b/tensorflow/core/kernels/tensor_cord.h @@ -205,12 +205,11 @@ class TensorCord { public: CordRep(absl::string_view view, CordRepReleaser releaser, void* arg = nullptr) - : is_inline_(false), rep_{.external = {view, releaser, arg}} {} + : is_inline_(false), rep_(view, releaser, arg) {} // **WARNING** Only use this constructor if // view.size() < CordRep::kMaxInlineSize. - explicit CordRep(absl::string_view view) - : is_inline_(true), rep_{.internal = InlineFromView(view)} {} + explicit CordRep(absl::string_view view) : is_inline_(true), rep_(view) {} ~CordRep() override; @@ -231,6 +230,10 @@ class TensorCord { absl::string_view view; CordRepReleaser releaser; void* arg; + + ExternalRep(absl::string_view view_, CordRepReleaser releaser_, + void* arg_) + : view(view_), releaser(releaser_), arg(arg_) {} }; // We save the size in the first byte, so subtract 1. @@ -242,19 +245,21 @@ class TensorCord { // string itself. using InlineRep = std::array; - static InlineRep InlineFromView(absl::string_view view) { - DCHECK_LT(view.size(), kMaxInlineSize); - InlineRep rep; - *reinterpret_cast(rep.data()) = view.size(); - std::memcpy(static_cast(rep.data() + 1), view.data(), view.size()); - return rep; - } - // Member variables. const bool is_inline_; - const union { + const union _rep_union { InlineRep internal; ExternalRep external; + + _rep_union(absl::string_view view, CordRepReleaser releaser, void* arg) + : external(view, releaser, arg) {} + + explicit _rep_union(absl::string_view view) { + DCHECK_LT(view.size(), kMaxInlineSize); + *reinterpret_cast(internal.data()) = view.size(); + std::memcpy(static_cast(internal.data() + 1), view.data(), + view.size()); + } } rep_; };