rust/src/test/ui/issues/issue-65611.rs
2019-10-24 00:41:14 -07:00

63 lines
1.3 KiB
Rust
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

use std::mem::MaybeUninit;
use std::ops::Deref;
pub unsafe trait Array {
/// The arrays element type
type Item;
#[doc(hidden)]
/// The smallest index type that indexes the array.
type Index: Index;
#[doc(hidden)]
fn as_ptr(&self) -> *const Self::Item;
#[doc(hidden)]
fn as_mut_ptr(&mut self) -> *mut Self::Item;
#[doc(hidden)]
fn capacity() -> usize;
}
pub trait Index : PartialEq + Copy {
fn to_usize(self) -> usize;
fn from(usize) -> Self;
}
impl Index for usize {
fn to_usize(self) -> usize { self }
fn from(val: usize) -> Self {
val
}
}
unsafe impl<T> Array for [T; 1] {
type Item = T;
type Index = usize;
fn as_ptr(&self) -> *const T { self as *const _ as *const _ }
fn as_mut_ptr(&mut self) -> *mut T { self as *mut _ as *mut _}
fn capacity() -> usize { 1 }
}
impl<A: Array> Deref for ArrayVec<A> {
type Target = [A::Item];
#[inline]
fn deref(&self) -> &[A::Item] {
panic!()
}
}
pub struct ArrayVec<A: Array> {
xs: MaybeUninit<A>,
len: usize,
}
impl<A: Array> ArrayVec<A> {
pub fn new() -> ArrayVec<A> {
panic!()
}
}
fn main() {
let mut buffer = ArrayVec::new();
let x = buffer.last().unwrap().0.clone();
//~^ ERROR type annotations needed
//~| ERROR no field `0` on type `&_`
buffer.reverse();
}