]> git.proxmox.com Git - rustc.git/blame - src/test/ui-fulldeps/issue-15924.rs
New upstream version 1.63.0+dfsg1
[rustc.git] / src / test / ui-fulldeps / issue-15924.rs
CommitLineData
416331ca
XL
1// run-pass
2
0bf4aa26
XL
3#![allow(unused_imports)]
4#![allow(unused_must_use)]
c34b1796 5// pretty-expanded FIXME #23616
223e47cc 6
3dfed10e 7use std::fmt;
923072b8
FG
8use std::marker::PhantomData;
9
10trait Encoder {
11 type Error;
12}
13
14trait Encodable<S: Encoder> {
15 fn encode(&self, s: &mut S) -> Result<(), S::Error>;
16}
17
18impl<S: Encoder> Encodable<S> for i32 {
19 fn encode(&self, _s: &mut S) -> Result<(), S::Error> {
20 Ok(())
21 }
22}
23
24struct JsonEncoder<'a>(PhantomData<&'a mut ()>);
25
26impl Encoder for JsonEncoder<'_> {
27 type Error = ();
28}
29
30fn encode_json<T: for<'r> Encodable<JsonEncoder<'r>>>(
31 object: &T,
32) -> Result<String, ()> {
33 let s = String::new();
34 {
35 let mut encoder = JsonEncoder(PhantomData);
36 object.encode(&mut encoder)?;
37 }
38 Ok(s)
39}
970d7e83 40
923072b8 41struct Foo<T: for<'a> Encodable<JsonEncoder<'a>>> {
1a4d82fc
JJ
42 v: T,
43}
223e47cc 44
923072b8 45impl<T: for<'a> Encodable<JsonEncoder<'a>>> Drop for Foo<T> {
1a4d82fc 46 fn drop(&mut self) {
923072b8 47 encode_json(&self.v);
223e47cc
LB
48 }
49}
50
51fn main() {
85aaf69f 52 let _ = Foo { v: 10 };
223e47cc 53}