#![feature(generic_const_exprs)] #![allow(incomplete_features)] trait TensorDimension { const DIM: usize; } trait TensorSize: TensorDimension { fn size(&self) -> [usize; Self::DIM]; } trait Broadcastable: TensorSize + Sized { type Element; fn lazy_updim(&self, size: [usize; NEWDIM]) {} } struct BMap<'a, R, T: Broadcastable, F: Fn(T::Element) -> R, const DIM: usize> { reference: &'a T, closure: F, } impl<'a, R, T: Broadcastable, F: Fn(T::Element) -> R, const DIM: usize> TensorDimension for BMap<'a, R, T, F, DIM> { const DIM: usize = DIM; } impl<'a, R, T: Broadcastable, F: Fn(T::Element) -> R, const DIM: usize> TensorSize for BMap<'a, R, T, F, DIM> { fn size(&self) -> [usize; DIM] { //~^ ERROR: method not compatible with trait [E0308] self.reference.size() //~^ ERROR: unconstrained generic constant //~| ERROR: mismatched types } } fn main() {}