45 lines
1.0 KiB
Rust
45 lines
1.0 KiB
Rust
|
//@ known-bug: #118603
|
||
|
//@ compile-flags: -Copt-level=0
|
||
|
// ignore-tidy-linelength
|
||
|
|
||
|
#![feature(generic_const_exprs)]
|
||
|
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
|
||
|
struct FlatTree;
|
||
|
|
||
|
#[derive(Copy, Clone)]
|
||
|
struct TreeLeaf;
|
||
|
|
||
|
#[derive(Copy, Clone)]
|
||
|
struct TreeNode<V, W>(V, W);
|
||
|
|
||
|
const fn const_concat<const A: usize, const B: usize>(_: [FlatTree; A], _: [FlatTree; B]) -> [FlatTree; A + B] {
|
||
|
[FlatTree; A + B]
|
||
|
}
|
||
|
|
||
|
struct Builder<const N: usize, I> {
|
||
|
ops: [FlatTree; N],
|
||
|
builder: I,
|
||
|
}
|
||
|
|
||
|
fn create_node<const N: usize, const M: usize, A, B>(a: Builder<N, A>, b: Builder<M, B>) -> Builder<{ N + M + 1 }, TreeNode<A, B>> {
|
||
|
Builder {
|
||
|
ops: const_concat(const_concat::<N, M>(a.ops, b.ops), [FlatTree]),
|
||
|
builder: TreeNode(a.builder, b.builder),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
const LEAF: Builder<1, TreeLeaf> = Builder {
|
||
|
ops: [FlatTree],
|
||
|
builder: TreeLeaf,
|
||
|
};
|
||
|
|
||
|
static INTERNAL_SIMPLE_BOOLEAN_TEMPLATES: &[fn()] = &[{
|
||
|
fn eval() {
|
||
|
create_node(LEAF, create_node(LEAF, LEAF));
|
||
|
}
|
||
|
|
||
|
eval
|
||
|
}];
|
||
|
|
||
|
pub fn main() {}
|