private:
  struct Storage_;

public:
  Config(Storage_ storage) noexcept : storage_(std::move(storage)) {}
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdefaulted-function-deleted"
  Config() = default;
#pragma clang diagnostic pop

  void RecordInspect(inspect::Node* node);

  {{#each fields}}
    const {{(cpp_type type_)}}& {{ident}}() const { return storage_.{{ident}}; }
    {{(cpp_type type_)}}& {{ident}}() { return storage_.{{ident}}; }

  {{/each}}

private:
  // TODO(https://fxbug.dev/100147) store a natural types object here instead
  struct Storage_ final {
    {{#each fields}}
        {{(cpp_type type_)}} {{ident}};
    {{/each}}
  };

  Storage_ storage_;
