#![feature(type_alias_impl_trait)] #![allow(dead_code)] type Bug = impl Fn(T) -> U + Copy; #[define_opaque(Bug)] const CONST_BUG: Bug = unsafe { std::mem::transmute(|_: u8| ()) }; //~^ ERROR item does not constrain `Bug::{opaque#0}` //~| ERROR: cannot transmute between types of different sizes, or dependently-sized types #[define_opaque(Bug)] fn make_bug>() -> Bug { |x| x.into() } fn main() { CONST_BUG(0); }