//@ run-pass #![feature(adt_const_params, unsized_const_params)] #![allow(incomplete_features)] pub fn function_with_str() -> &'static str { STRING } pub fn function_with_bytes() -> &'static [u8] { BYTES } // Also check the codepaths for custom DST #[derive(std::marker::UnsizedConstParamTy, PartialEq, Eq)] struct MyStr(str); fn function_with_my_str() -> &'static MyStr { S } impl MyStr { const fn new(s: &'static str) -> &'static MyStr { unsafe { std::mem::transmute(s) } } fn as_str(&self) -> &str { &self.0 } } pub fn main() { assert_eq!(function_with_str::<"Rust">(), "Rust"); assert_eq!(function_with_str::<"ℇ㇈↦">(), "ℇ㇈↦"); assert_eq!(function_with_bytes::(), &[0x41, 0x41, 0x41, 0x41]); assert_eq!(function_with_bytes::<{ &[0x41, 0x41, 0x41, 0x41] }>(), b"AAAA"); assert_eq!(function_with_my_str::<{ MyStr::new("hello") }>().as_str(), "hello"); }