document type_implements_trait

This commit is contained in:
mejrs 2024-11-04 18:08:30 +01:00
parent 56c6a2f9b1
commit c88ba28d9a

View File

@ -60,6 +60,18 @@ fn type_is_sized_modulo_regions(&self, param_env: ty::ParamEnv<'tcx>, ty: Ty<'tc
/// ///
/// Invokes `evaluate_obligation`, so in the event that evaluating /// Invokes `evaluate_obligation`, so in the event that evaluating
/// `Ty: Trait` causes overflow, EvaluatedToAmbigStackDependent will be returned. /// `Ty: Trait` causes overflow, EvaluatedToAmbigStackDependent will be returned.
///
/// `type_implements_trait` is a convenience function for simple cases like
///
/// ```ignore (illustrative)
/// let copy_trait = infcx.tcx.require_lang_item(LangItem::Copy, span);
/// let implements_copy = infcx.type_implements_trait(copy_trait, [ty], param_env)
/// .must_apply_modulo_regions();
/// ```
///
/// In most cases you should instead create an [Obligation](traits::Obligation)
/// and check whether it holds, because it properly handles higher ranked traits
/// and it is more convenient and safer when your `params` are inside a `Binder`.
#[instrument(level = "debug", skip(self, params), ret)] #[instrument(level = "debug", skip(self, params), ret)]
fn type_implements_trait( fn type_implements_trait(
&self, &self,