39 lines
861 B
Rust
39 lines
861 B
Rust
// https://github.com/rust-lang/rust/issues/60726
|
|
#![crate_name="foo"]
|
|
|
|
use std::marker::PhantomData;
|
|
|
|
pub struct True;
|
|
pub struct False;
|
|
|
|
pub trait InterfaceType{
|
|
type Send;
|
|
}
|
|
|
|
|
|
pub struct FooInterface<T>(PhantomData<fn()->T>);
|
|
|
|
impl<T> InterfaceType for FooInterface<T> {
|
|
type Send=False;
|
|
}
|
|
|
|
|
|
pub struct DynTrait<I>{
|
|
_interface:PhantomData<fn()->I>,
|
|
_unsync_unsend:PhantomData<::std::rc::Rc<()>>,
|
|
}
|
|
|
|
unsafe impl<I> Send for DynTrait<I>
|
|
where
|
|
I:InterfaceType<Send=True>
|
|
{}
|
|
|
|
//@ has foo/struct.IntoIter.html
|
|
//@ has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
|
|
// "impl<T> !Send for IntoIter<T>"
|
|
//@ has - '//*[@id="synthetic-implementations-list"]//*[@class="impl"]//h3[@class="code-header"]' \
|
|
// "impl<T> !Sync for IntoIter<T>"
|
|
pub struct IntoIter<T>{
|
|
hello:DynTrait<FooInterface<T>>,
|
|
}
|