Rollup merge of #23179 - steveklabnik:mini_rollup, r=steveklabnik
I had to fix up some PRs: * https://github.com/rust-lang/rust/pull/22976 * https://github.com/rust-lang/rust/pull/22945 * https://github.com/rust-lang/rust/pull/22845
This commit is contained in:
commit
0e0bb8a128
@ -611,7 +611,7 @@ pub trait IteratorExt: Iterator + Sized {
|
||||
///
|
||||
/// ```
|
||||
/// let a = [1, 2, 3, 4, 5];
|
||||
/// assert!(a.iter().fold(0, |a, &b| a + b) == 15);
|
||||
/// assert!(a.iter().fold(0, |acc, &item| acc + item) == 15);
|
||||
/// ```
|
||||
#[inline]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
|
@ -351,7 +351,45 @@ pub trait PhantomFn<A:?Sized,R:?Sized=()> { }
|
||||
/// instance, it will behave *as if* an instance of the type `T` were
|
||||
/// present for the purpose of various automatic analyses.
|
||||
///
|
||||
/// For example, embedding a `PhantomData<T>` will inform the compiler
|
||||
/// # Examples
|
||||
///
|
||||
/// When handling external resources over a foreign function interface, `PhantomData<T>` can
|
||||
/// prevent mismatches by enforcing types in the method implementations, although the struct
|
||||
/// doesn't actually contain values of the resource type.
|
||||
///
|
||||
/// ```
|
||||
/// # trait ResType { fn foo(&self); };
|
||||
/// # struct ParamType;
|
||||
/// # mod foreign_lib {
|
||||
/// # pub fn new(_: usize) -> *mut () { 42 as *mut () }
|
||||
/// # pub fn do_stuff(_: *mut (), _: usize) {}
|
||||
/// # }
|
||||
/// # fn convert_params(_: ParamType) -> usize { 42 }
|
||||
/// use std::marker::PhantomData;
|
||||
/// use std::mem;
|
||||
///
|
||||
/// struct ExternalResource<R> {
|
||||
/// resource_handle: *mut (),
|
||||
/// resource_type: PhantomData<R>,
|
||||
/// }
|
||||
///
|
||||
/// impl<R: ResType> ExternalResource<R> {
|
||||
/// fn new() -> ExternalResource<R> {
|
||||
/// let size_of_res = mem::size_of::<R>();
|
||||
/// ExternalResource {
|
||||
/// resource_handle: foreign_lib::new(size_of_res),
|
||||
/// resource_type: PhantomData,
|
||||
/// }
|
||||
/// }
|
||||
///
|
||||
/// fn do_stuff(&self, param: ParamType) {
|
||||
/// let foreign_params = convert_params(param);
|
||||
/// foreign_lib::do_stuff(self.resource_handle, foreign_params);
|
||||
/// }
|
||||
/// }
|
||||
/// ```
|
||||
///
|
||||
/// Another example: embedding a `PhantomData<T>` will inform the compiler
|
||||
/// that one or more instances of the type `T` could be dropped when
|
||||
/// instances of the type itself is dropped, though that may not be
|
||||
/// apparent from the other structure of the type itself. This is
|
||||
|
@ -1264,7 +1264,7 @@ pub struct BareFnTy {
|
||||
/// The different kinds of types recognized by the compiler
|
||||
pub enum Ty_ {
|
||||
TyVec(P<Ty>),
|
||||
/// A fixed length array (`[T, ..n]`)
|
||||
/// A fixed length array (`[T; n]`)
|
||||
TyFixedLengthVec(P<Ty>, P<Expr>),
|
||||
/// A raw pointer (`*const T` or `*mut T`)
|
||||
TyPtr(MutTy),
|
||||
|
Loading…
x
Reference in New Issue
Block a user