summaryrefslogtreecommitdiffstats
path: root/src/test/ui/generic-associated-types/issue-74824.rs
blob: 1bbf7aac5cdabc6ff70bb90f645e3f85ccda02f8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#![feature(generic_associated_types)]
#![feature(associated_type_defaults)]

use std::ops::Deref;

trait UnsafeCopy {
    type Copy<T>: Copy = Box<T>;
    //~^ ERROR the trait bound `Box<T>: Copy` is not satisfied
    //~^^ ERROR the trait bound `T: Clone` is not satisfied
    fn copy<T>(x: &Self::Copy<T>) -> Self::Copy<T> {
        *x
    }
}

impl<T> UnsafeCopy for T {}

fn main() {
    let b = Box::new(42usize);
    let copy = <()>::copy(&b);

    let raw_b = Box::deref(&b) as *const _;
    let raw_copy = Box::deref(&copy) as *const _;

    // assert the addresses.
    assert_eq!(raw_b, raw_copy);
}