message: Mark TraceMe(string&&) as deleted
diff: @@ -97,30 +97,21 @@ class TraceMe {
  #endif
  }
  - // string&& constructor to prevent an unnecessary string copy, e.g. when a
  - // TraceMe is constructed based on the result of a StrCat operation.
  - // Note: We can't take the string by value because a) it would make the
  - // overloads ambiguous, and b) we want lvalue strings to use the string_view
  - // constructor so we avoid copying them when tracing is disabled.
  - explicit TraceMe(std::string&& name, int level = 1) {
  - DCHECK_GE(level, 1);
  -#if !defined(IS_MOBILE_PLATFORM)
  - if (TF_PREDICT_FALSE(TraceMeRecorder::Active(level))) {
  - new (&no_init_.name) std::string(std::move(name));
  - start_time_ = EnvTime::NowNanos();
  - }
  -#endif
  - }
  + // Do not allow passing a temporary string as the overhead of generating that
  + // string should only be incurred when tracing is enabled. Wrap the temporary
  + // string generation (e.g., StrCat) in a lambda and use the name_generator
  + // template instead.
  + explicit TraceMe(std::string&& name, int level = 1) = delete;
  // Do not allow passing strings by reference or value since the caller
  // may unintentionally maintain ownership of the name.
  - // Explicitly std::move the name or wrap it in a string_view if
  - // you really wish to maintain ownership.
  + // Explicitly wrap the name in a string_view if you really wish to maintain
  + // ownership of a string already generated for other purposes. For temporary
  + // strings (e.g., result of StrCat) use the name_generator template.
  explicit TraceMe(const std::string& name, int level = 1) = delete;
  // This overload is necessary to make TraceMe's with string literals work.
  - // Otherwise, the string&& and the string_view constructor would be equally
  - // good overload candidates.
  + // Otherwise, the name_generator template would be used.
  explicit TraceMe(const char* raw, int level = 1)
  : TraceMe(absl::string_view(raw), level) {}
  