From Why are Option variants lang items?, we see this list of lang items.
Note that a topic of debate is whether these should be split into two categories:
- Semantics-altering lang items (Things which cannot be expressed using pure rust, such as
Box
, orFn
traits)- Compiler-knowledge items, where the compiler "needs to know" where they are when doing desugaring, such as
for
loops,?
operations, etc.
Filtering for lines that have Target::Trait
, we see:
Sized, sized_trait, Target::Trait;
Unsize, unsize_trait, Target::Trait;
StructuralPeq, structural_peq_trait, Target::Trait;
StructuralTeq, structural_teq_trait, Target::Trait;
Copy, copy_trait, Target::Trait;
Clone, clone_trait, Target::Trait;
Sync, sync_trait, Target::Trait;
DiscriminantKind, discriminant_kind_trait, Target::Trait;
PointeeTrait, pointee_trait, Target::Trait;
Freeze, freeze_trait, Target::Trait;
Drop, drop_trait, Target::Trait;
CoerceUnsized, coerce_unsized_trait, Target::Trait;
DispatchFromDyn, dispatch_from_dyn_trait, Target::Trait;
Add(Op), add_trait, Target::Trait;
Sub(Op), sub_trait, Target::Trait;
Mul(Op), mul_trait, Target::Trait;
Div(Op), div_trait, Target::Trait;
Rem(Op), rem_trait, Target::Trait;
Neg(Op), neg_trait, Target::Trait;
Not(Op), not_trait, Target::Trait;
BitXor(Op), bitxor_trait, Target::Trait;
BitAnd(Op), bitand_trait, Target::Trait;
BitOr(Op), bitor_trait, Target::Trait;
Shl(Op), shl_trait, Target::Trait;
Shr(Op), shr_trait, Target::Trait;
AddAssign(Op), add_assign_trait, Target::Trait;
SubAssign(Op), sub_assign_trait, Target::Trait;
MulAssign(Op), mul_assign_trait, Target::Trait;
DivAssign(Op), div_assign_trait, Target::Trait;
RemAssign(Op), rem_assign_trait, Target::Trait;
BitXorAssign(Op), bitxor_assign_trait, Target::Trait;
BitAndAssign(Op), bitand_assign_trait, Target::Trait;
BitOrAssign(Op), bitor_assign_trait, Target::Trait;
ShlAssign(Op), shl_assign_trait, Target::Trait;
ShrAssign(Op), shr_assign_trait, Target::Trait;
Index(Op), index_trait, Target::Trait;
IndexMut(Op), index_mut_trait, Target::Trait;
Deref, deref_trait, Target::Trait;
DerefMut, deref_mut_trait, Target::Trait;
Receiver, receiver_trait, Target::Trait;
Fn, fn_trait, Target::Trait;
FnMut, fn_mut_trait, Target::Trait;
FnOnce, fn_once_trait, Target::Trait;
Future, future_trait, Target::Trait;
Generator, gen_trait, Target::Trait;
Unpin, unpin_trait, Target::Trait;
PartialEq, eq_trait, Target::Trait;
PartialOrd, partial_ord_trait, Target::Trait;
Termination, termination, Target::Trait;
Try, try_trait, Target::Trait;
TryFromError, from_error_fn, Target::Method(MethodKind::Trait { body: false });
TryFromOk, from_ok_fn, Target::Method(MethodKind::Trait { body: false });
TryIntoResult, into_result_fn, Target::Method(MethodKind::Trait { body: false });
FuturePoll, future_poll_fn, Target::Method(MethodKind::Trait { body: false });
FromFrom, from_fn, Target::Method(MethodKind::Trait { body: false });
IntoIterIntoIter, into_iter_fn, Target::Method(MethodKind::Trait { body: false });
IteratorNext, next_fn, Target::Method(MethodKind::Trait { body: false});