Skip to content

Commit a81e489

Browse files
committed
Return pos impl trait
1 parent 6469fba commit a81e489

File tree

3 files changed

+94
-0
lines changed

3 files changed

+94
-0
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// run-pass
2+
#![feature(const_generics_defaults)]
3+
4+
struct Uwu<const N: u32 = 1, const M: u32 = N>;
5+
6+
trait Trait {}
7+
impl<const N: u32> Trait for Uwu<N> {}
8+
9+
fn rawr<const N: u32>() -> impl Trait {
10+
Uwu::<N>
11+
}
12+
13+
trait Traitor<const N: u8 = 1, const M: u8 = N> { }
14+
15+
impl<const N: u8> Traitor<N> for u32 {}
16+
impl Traitor<1, 1> for u64 {}
17+
18+
fn uwu<const N: u8>() -> impl Traitor<N> {
19+
1_u32
20+
}
21+
22+
fn owo() -> impl Traitor {
23+
1_u64
24+
}
25+
26+
fn main() {
27+
rawr::<3>();
28+
rawr::<7>();
29+
uwu::<{ u8::MAX }>();
30+
owo();
31+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#![feature(const_generics_defaults)]
2+
3+
struct Uwu<const N: u32 = 1, const M: u32 = N>;
4+
5+
trait Trait {}
6+
impl<const N: u32> Trait for Uwu<N> {}
7+
8+
fn rawr() -> impl Trait {
9+
//~^ error: the trait bound `Uwu<10_u32, 12_u32>: Trait` is not satisfied
10+
Uwu::<10, 12>
11+
}
12+
13+
trait Traitor<const N: u8 = 1, const M: u8 = N> { }
14+
15+
impl<const N: u8> Traitor<N, 2> for u32 {}
16+
impl Traitor<1, 2> for u64 {}
17+
18+
19+
fn uwu<const N: u8>() -> impl Traitor<N> {
20+
//~^ error: the trait bound `u32: Traitor<N, N>` is not satisfied
21+
1_u32
22+
}
23+
24+
fn owo() -> impl Traitor {
25+
//~^ error: the trait bound `u64: Traitor<1_u8, 1_u8>` is not satisfied
26+
1_u64
27+
}
28+
29+
fn main() {
30+
rawr();
31+
uwu();
32+
owo();
33+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
error[E0277]: the trait bound `Uwu<10_u32, 12_u32>: Trait` is not satisfied
2+
--> $DIR/rp_impl_trait_fail.rs:8:14
3+
|
4+
LL | fn rawr() -> impl Trait {
5+
| ^^^^^^^^^^ the trait `Trait` is not implemented for `Uwu<10_u32, 12_u32>`
6+
|
7+
= help: the following implementations were found:
8+
<Uwu<N> as Trait>
9+
10+
error[E0277]: the trait bound `u32: Traitor<N, N>` is not satisfied
11+
--> $DIR/rp_impl_trait_fail.rs:19:26
12+
|
13+
LL | fn uwu<const N: u8>() -> impl Traitor<N> {
14+
| ^^^^^^^^^^^^^^^ the trait `Traitor<N, N>` is not implemented for `u32`
15+
|
16+
= help: the following implementations were found:
17+
<u32 as Traitor<N, 2_u8>>
18+
19+
error[E0277]: the trait bound `u64: Traitor<1_u8, 1_u8>` is not satisfied
20+
--> $DIR/rp_impl_trait_fail.rs:24:13
21+
|
22+
LL | fn owo() -> impl Traitor {
23+
| ^^^^^^^^^^^^ the trait `Traitor<1_u8, 1_u8>` is not implemented for `u64`
24+
|
25+
= help: the following implementations were found:
26+
<u64 as Traitor<1_u8, 2_u8>>
27+
28+
error: aborting due to 3 previous errors
29+
30+
For more information about this error, try `rustc --explain E0277`.

0 commit comments

Comments
 (0)