================ @@ -1429,6 +1429,22 @@ operator<<(const StreamingDiagnostic &DB, T *DC) { return DB; } +// Convert scope enums to their underlying type, so that we don't have +// clutter the emitting code with `llvm::to_underlying()`. +// We also need to disable implicit conversion for the first argument, +// because classes that derive from StreamingDiagnostic define their own +// templated operator<< that accept a wide variety of types, leading +// to ambiguity. +template <typename T, typename U> +inline std::enable_if_t< + std::is_same_v<std::remove_const_t<T>, StreamingDiagnostic> && + llvm::is_scoped_enum_v<std::remove_reference_t<U>>, ---------------- Endilll wrote:
I checked that `const` qualifier doesn't get in the way, and that's what we do in other similar cases. Happy to be proven wrong by buildbots. https://github.com/llvm/llvm-project/pull/138089 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits