diff --git a/src/core/ext/filters/client_channel/resolver_result_parsing.cc b/src/core/ext/filters/client_channel/resolver_result_parsing.cc
index 35e54779c69aed587d0100b87c42ff5497d1baaa..452dea6a0f71bbd6aba84fbaccf9d3ddeca12a7a 100644
--- a/src/core/ext/filters/client_channel/resolver_result_parsing.cc
+++ b/src/core/ext/filters/client_channel/resolver_result_parsing.cc
@@ -416,8 +416,8 @@ ClientChannelServiceConfigParser::ParseGlobalParams(const grpc_json* json,
             "field:retryThrottling error:Type should be object"));
         continue;
       }
-      Optional<int> max_milli_tokens = Optional<int>();
-      Optional<int> milli_token_ratio = Optional<int>();
+      Optional<int> max_milli_tokens;
+      Optional<int> milli_token_ratio;
       for (grpc_json* sub_field = field->child; sub_field != nullptr;
            sub_field = sub_field->next) {
         if (sub_field->key == nullptr) continue;
@@ -535,7 +535,7 @@ ClientChannelServiceConfigParser::ParsePerMethodParams(const grpc_json* json,
                                                        grpc_error** error) {
   GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
   InlinedVector<grpc_error*, 4> error_list;
-  Optional<bool> wait_for_ready = Optional<bool>();
+  Optional<bool> wait_for_ready;
   grpc_millis timeout = 0;
   UniquePtr<ClientChannelMethodParsedObject::RetryPolicy> retry_policy;
   for (grpc_json* field = json->child; field != nullptr; field = field->next) {
diff --git a/src/core/lib/gprpp/optional.h b/src/core/lib/gprpp/optional.h
index a8e3ce1505ee1f515eb41565528ffe8972d65a2f..ab5f86393b6a0e3c77c9b80fc751760cb6fd9792 100644
--- a/src/core/lib/gprpp/optional.h
+++ b/src/core/lib/gprpp/optional.h
@@ -26,6 +26,7 @@ namespace grpc_core {
 template <typename T>
 class Optional {
  public:
+  Optional() : value_() {}
   void set(const T& val) {
     value_ = val;
     set_ = true;