| #![feature(const_eval_select)] | |
| #![feature(core_intrinsics)] | |
| use std::intrinsics::const_eval_select; | |
| const fn not_fn_items() { | |
| const_eval_select((), || {}, || {}); | |
| //~^ ERROR this argument must be a function item | |
| //~| ERROR this argument must be a function item | |
| const_eval_select((), 42, 0xDEADBEEF); | |
| //~^ ERROR expected a `FnOnce()` closure | |
| //~| ERROR expected a `FnOnce()` closure | |
| //~| ERROR this argument must be a function item | |
| //~| ERROR this argument must be a function item | |
| } | |
| const fn foo(n: i32) -> i32 { | |
| n | |
| } | |
| fn bar(n: i32) -> bool { | |
| assert_eq!(n, 0, "{} must be equal to {}", n, 0); | |
| n == 0 | |
| } | |
| fn baz(n: bool) -> i32 { | |
| assert!(n, "{} must be true", n); | |
| n as i32 | |
| } | |
| const fn return_ty_mismatch() { | |
| const_eval_select((1,), foo, bar); | |
| //~^ ERROR expected `bar` to be a fn item that returns `i32`, but it returns `bool` | |
| } | |
| const fn args_ty_mismatch() { | |
| const_eval_select((true,), foo, baz); | |
| //~^ ERROR type mismatch | |
| } | |
| const fn non_const_fn() { | |
| const_eval_select((1,), bar, bar); | |
| //~^ ERROR this argument must be a `const fn` | |
| } | |
| fn main() {} |