Module rustc_trait_selection::traits::wf
source · Structs
Enums
Controls whether we “elaborate” supertraits and so forth on the WF
predicates. This is a kind of hack to address #43784. The
underlying problem in that issue was a trait structure like:
Functions
Given an object type like
SomeTrait + Send, computes the lifetime
bounds that must hold on the elided self type. These are derived
from the declarations of SomeTrait, Send, and friends – if
they declare trait SomeTrait : 'static, for example, then
'static would appear in the list. The hard work is done by
infer::required_region_bounds, see that for more information.Returns the set of obligations needed to make
arg well-formed.
If arg contains unresolved inference variables, this may include
further WF obligations. However, if arg IS an unresolved
inference variable, returns None, because we are not able to
make any progress at all. This is to prevent “livelock” where we
say “$0 is WF if $0 is WF”.Given a set of predicates that apply to an object type, returns
the region bounds that the (erased)
Self type must
outlive. Precisely because the Self type is erased, the
parameter erased_self_ty must be supplied to indicate what type
has been used to represent Self in the predicates
themselves. This should really be a unique type; FreshTy(0) is a
popular choice.Returns the obligations that make this trait reference
well-formed. For example, if there is a trait
Set defined like
trait Set<K:Eq>, then the trait reference Foo: Set<Bar> is WF
if Bar: Eq.