Split impl-with-default-fn test into a pass test and a fail test
This commit is contained in:
parent
de940fc725
commit
0a03f8c78b
3 changed files with 38 additions and 8 deletions
|
@ -1,4 +1,5 @@
|
||||||
#![feature(const_trait_impl)]
|
#![feature(const_trait_impl)]
|
||||||
|
#![feature(const_fn_trait_bound)]
|
||||||
|
|
||||||
trait Tr {
|
trait Tr {
|
||||||
fn req(&self);
|
fn req(&self);
|
||||||
|
@ -18,11 +19,6 @@ impl const Tr for S {
|
||||||
fn req(&self) {}
|
fn req(&self) {}
|
||||||
} //~^^ ERROR const trait implementations may not use non-const default functions
|
} //~^^ ERROR const trait implementations may not use non-const default functions
|
||||||
|
|
||||||
impl const Tr for u8 {
|
|
||||||
fn req(&self) {}
|
|
||||||
fn prov(&self) {}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl const Tr for u16 {
|
impl const Tr for u16 {
|
||||||
fn prov(&self) {}
|
fn prov(&self) {}
|
||||||
fn default() {}
|
fn default() {}
|
|
@ -1,5 +1,5 @@
|
||||||
error: const trait implementations may not use non-const default functions
|
error: const trait implementations may not use non-const default functions
|
||||||
--> $DIR/impl-with-default-fn.rs:17:1
|
--> $DIR/impl-with-default-fn-fail.rs:18:1
|
||||||
|
|
|
|
||||||
LL | / impl const Tr for S {
|
LL | / impl const Tr for S {
|
||||||
LL | | fn req(&self) {}
|
LL | | fn req(&self) {}
|
||||||
|
@ -9,7 +9,7 @@ LL | | }
|
||||||
= note: `prov` not implemented
|
= note: `prov` not implemented
|
||||||
|
|
||||||
error: const trait implementations may not use non-const default functions
|
error: const trait implementations may not use non-const default functions
|
||||||
--> $DIR/impl-with-default-fn.rs:32:1
|
--> $DIR/impl-with-default-fn-fail.rs:28:1
|
||||||
|
|
|
|
||||||
LL | / impl const Tr for u32 {
|
LL | / impl const Tr for u32 {
|
||||||
LL | | fn req(&self) {}
|
LL | | fn req(&self) {}
|
||||||
|
@ -20,7 +20,7 @@ LL | | }
|
||||||
= note: `prov` not implemented
|
= note: `prov` not implemented
|
||||||
|
|
||||||
error[E0046]: not all trait items implemented, missing: `req`
|
error[E0046]: not all trait items implemented, missing: `req`
|
||||||
--> $DIR/impl-with-default-fn.rs:26:1
|
--> $DIR/impl-with-default-fn-fail.rs:22:1
|
||||||
|
|
|
|
||||||
LL | fn req(&self);
|
LL | fn req(&self);
|
||||||
| -------------- `req` from trait
|
| -------------- `req` from trait
|
|
@ -0,0 +1,34 @@
|
||||||
|
// check-pass
|
||||||
|
|
||||||
|
#![feature(const_trait_impl)]
|
||||||
|
#![feature(const_fn_trait_bound)]
|
||||||
|
|
||||||
|
trait Tr {
|
||||||
|
fn req(&self);
|
||||||
|
|
||||||
|
fn prov(&self) {
|
||||||
|
println!("lul");
|
||||||
|
self.req();
|
||||||
|
}
|
||||||
|
|
||||||
|
#[default_method_body_is_const]
|
||||||
|
fn default() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl const Tr for u8 {
|
||||||
|
fn req(&self) {}
|
||||||
|
fn prov(&self) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
macro_rules! impl_tr {
|
||||||
|
($ty: ty) => {
|
||||||
|
impl const Tr for $ty {
|
||||||
|
fn req(&self) {}
|
||||||
|
fn prov(&self) {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl_tr!(u64);
|
||||||
|
|
||||||
|
fn main() {}
|
Loading…
Add table
Add a link
Reference in a new issue