diff --git a/common/internal/byte_string.h b/common/internal/byte_string.h index e2f38a5c4..1995542d9 100644 --- a/common/internal/byte_string.h +++ b/common/internal/byte_string.h @@ -307,16 +307,14 @@ ByteString final { void HashValue(absl::HashState state) const; template - std::common_type_t, - std::invoke_result_t> - Visit(Visitor&& visitor) const { + decltype(auto) Visit(Visitor&& visitor) const { switch (GetKind()) { case ByteStringKind::kSmall: - return std::invoke(std::forward(visitor), GetSmall()); + return std::forward(visitor)(GetSmall()); case ByteStringKind::kMedium: - return std::invoke(std::forward(visitor), GetMedium()); + return std::forward(visitor)(GetMedium()); case ByteStringKind::kLarge: - return std::invoke(std::forward(visitor), GetLarge()); + return std::forward(visitor)(GetLarge()); } } @@ -664,15 +662,13 @@ class ABSL_ATTRIBUTE_TRIVIAL_ABI ByteStringView final { void HashValue(absl::HashState state) const; template - std::common_type_t, - std::invoke_result_t> - Visit(Visitor&& visitor) const { + decltype(auto) Visit(Visitor&& visitor) const { switch (GetKind()) { case ByteStringViewKind::kString: - return std::invoke(std::forward(visitor), GetString()); + return std::forward(visitor)(GetString()); case ByteStringViewKind::kCord: - return std::invoke(std::forward(visitor), - static_cast(GetSubcord())); + return std::forward(visitor)( + static_cast(GetSubcord())); } }