mirror of https://github.com/rust-lang/rust
62 lines
2.3 KiB
Rust
62 lines
2.3 KiB
Rust
#![feature(const_trait_impl)]
|
|
|
|
#[const_trait]
|
|
trait Trait {}
|
|
|
|
// Regression test for issue #90052.
|
|
fn non_const_function<T: ~const Trait>() {} //~ ERROR `~const` is not allowed
|
|
|
|
struct Struct<T: ~const Trait> { field: T } //~ ERROR `~const` is not allowed here
|
|
struct TupleStruct<T: ~const Trait>(T); //~ ERROR `~const` is not allowed here
|
|
struct UnitStruct<T: ~const Trait>; //~ ERROR `~const` is not allowed here
|
|
//~^ ERROR parameter `T` is never used
|
|
|
|
enum Enum<T: ~const Trait> { Variant(T) } //~ ERROR `~const` is not allowed here
|
|
|
|
union Union<T: ~const Trait> { field: T } //~ ERROR `~const` is not allowed here
|
|
//~^ ERROR field must implement `Copy`
|
|
|
|
type Type<T: ~const Trait> = T; //~ ERROR `~const` is not allowed here
|
|
|
|
const CONSTANT<T: ~const Trait>: () = (); //~ ERROR `~const` is not allowed here
|
|
//~^ ERROR generic const items are experimental
|
|
|
|
trait NonConstTrait {
|
|
type Type<T: ~const Trait>: ~const Trait;
|
|
//~^ ERROR `~const` is not allowed
|
|
//~| ERROR `~const` is not allowed
|
|
fn non_const_function<T: ~const Trait>(); //~ ERROR `~const` is not allowed
|
|
const CONSTANT<T: ~const Trait>: (); //~ ERROR `~const` is not allowed
|
|
//~^ ERROR generic const items are experimental
|
|
}
|
|
|
|
impl NonConstTrait for () {
|
|
type Type<T: ~const Trait> = (); //~ ERROR `~const` is not allowed
|
|
//~^ ERROR overflow evaluating the requirement `(): Trait`
|
|
fn non_const_function<T: ~const Trait>() {} //~ ERROR `~const` is not allowed
|
|
const CONSTANT<T: ~const Trait>: () = (); //~ ERROR `~const` is not allowed
|
|
//~^ ERROR generic const items are experimental
|
|
}
|
|
|
|
struct Implementor;
|
|
|
|
impl Implementor {
|
|
type Type<T: ~const Trait> = (); //~ ERROR `~const` is not allowed
|
|
//~^ ERROR inherent associated types are unstable
|
|
fn non_const_function<T: ~const Trait>() {} //~ ERROR `~const` is not allowed
|
|
const CONSTANT<T: ~const Trait>: () = (); //~ ERROR `~const` is not allowed
|
|
//~^ ERROR generic const items are experimental
|
|
}
|
|
|
|
// non-const traits
|
|
trait Child0: ~const Trait {} //~ ERROR `~const` is not allowed
|
|
trait Child1 where Self: ~const Trait {} //~ ERROR `~const` is not allowed
|
|
|
|
// non-const impl
|
|
impl<T: ~const Trait> Trait for T {} //~ ERROR `~const` is not allowed
|
|
|
|
// inherent impl (regression test for issue #117004)
|
|
impl<T: ~const Trait> Struct<T> {} //~ ERROR `~const` is not allowed
|
|
|
|
fn main() {}
|