================ @@ -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>>, ---------------- erichkeane wrote:
No need for this to be `std::remove_cvref_t`? 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