2024-11-24 00:30:16 +00:00
|
|
|
//@ compile-flags: -Znext-solver
|
2021-09-03 09:53:57 +00:00
|
|
|
//@ revisions: stock precise
|
2024-11-24 00:30:16 +00:00
|
|
|
|
2024-11-19 17:08:52 +00:00
|
|
|
#![feature(const_trait_impl, const_destruct)]
|
2021-09-03 09:53:57 +00:00
|
|
|
#![cfg_attr(precise, feature(const_precise_live_drops))]
|
2021-09-01 16:40:42 +00:00
|
|
|
|
2022-03-21 05:52:41 +00:00
|
|
|
use std::marker::{Destruct, PhantomData};
|
2021-09-03 10:04:43 +00:00
|
|
|
|
2021-09-01 16:40:42 +00:00
|
|
|
struct NonTrivialDrop;
|
|
|
|
|
|
|
|
impl Drop for NonTrivialDrop {
|
|
|
|
fn drop(&mut self) {
|
|
|
|
println!("Non trivial drop");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
struct ConstImplWithDropGlue(NonTrivialDrop);
|
|
|
|
|
|
|
|
impl const Drop for ConstImplWithDropGlue {
|
|
|
|
fn drop(&mut self) {}
|
|
|
|
}
|
|
|
|
|
2022-03-21 05:52:41 +00:00
|
|
|
const fn check<T: ~const Destruct>(_: T) {}
|
2021-09-01 16:40:42 +00:00
|
|
|
|
|
|
|
macro_rules! check_all {
|
2021-09-02 10:59:53 +00:00
|
|
|
($($exp:expr),*$(,)?) => {$(
|
|
|
|
const _: () = check($exp);
|
2021-09-01 16:40:42 +00:00
|
|
|
)*};
|
|
|
|
}
|
|
|
|
|
|
|
|
check_all! {
|
2021-09-02 10:59:53 +00:00
|
|
|
NonTrivialDrop,
|
2024-11-24 01:15:04 +00:00
|
|
|
//~^ ERROR the trait bound `NonTrivialDrop: const Destruct` is not satisfied
|
2021-09-02 10:59:53 +00:00
|
|
|
ConstImplWithDropGlue(NonTrivialDrop),
|
2024-11-24 01:15:04 +00:00
|
|
|
//~^ ERROR the trait bound `NonTrivialDrop: const Destruct` is not satisfied
|
2021-09-01 16:40:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {}
|