message: static constexpr variables are not inline until C++17. With our guarantee to compile in C++14, using a constexpr inline function is the only way to prevent linking issues.
diff: @@ -283,7 +283,7 @@ class Variant {
  private:
  struct in_place_t {};
  - static constexpr in_place_t kInPlace{};
  + static constexpr in_place_t InPlace() { return in_place_t{}; }
  struct ValueInterface {
  virtual ~ValueInterface() = default;
  @@ -323,7 +323,7 @@ class Variant {
  const void* RawPtr() const final { return &value; }
  std::unique_ptr<ValueInterface> Clone() const final {
  - return absl::make_unique<Value>(kInPlace, value);
  + return absl::make_unique<Value>(InPlace(), value);
  }
  void MoveAssign(ValueInterface* memory) final {
  @@ -333,11 +333,11 @@ class Variant {
  }
  void CloneInto(ValueInterface* memory) const final {
  - new (memory) Value(kInPlace, value);
  + new (memory) Value(InPlace(), value);
  }
  void MoveInto(ValueInterface* memory) final {
  - new (memory) Value(kInPlace, std::move(value));
  + new (memory) Value(InPlace(), std::move(value));
  }
  string TypeName() const final { return TypeNameVariant(value); }
  @@ -378,7 +378,7 @@ class Variant {
  template <typename VT, class... Args>
  explicit InlineValue(Tag<VT> /*tag*/, Args&&... args) noexcept {
  Value<VT>* inline_value_data = reinterpret_cast<Value<VT>*>(value_data);
  - new (inline_value_data) Value<VT>(kInPlace, std::forward<Args>(args)...);
  + new (inline_value_data) Value<VT>(InPlace(), std::forward<Args>(args)...);
  }
  InlineValue(const InlineValue& other) noexcept {
  @@ -489,7 +489,7 @@ class Variant {
  InlineValue(InlineValue::Tag<VT>{}, std::forward<T>(value));
  } else {
  new (&heap_value_) HeapValue(
  - absl::make_unique<Value<VT>>(kInPlace, std::forward<T>(value)));
  + absl::make_unique<Value<VT>>(InPlace(), std::forward<T>(value)));
  }
  }
  };
  