]> git.lizzy.rs Git - rust.git/blob - tests/ui/const-generics/generic_const_exprs/issue-83765.rs
Rollup merge of #104645 - yukiomoto:log-backtrace-option, r=oli-obk
[rust.git] / tests / ui / const-generics / generic_const_exprs / issue-83765.rs
1 #![feature(generic_const_exprs)]
2 #![allow(incomplete_features)]
3
4 trait TensorDimension {
5     const DIM: usize;
6 }
7
8 trait TensorSize: TensorDimension {
9     fn size(&self) -> [usize; Self::DIM];
10 }
11
12 trait Broadcastable: TensorSize + Sized {
13     type Element;
14     fn lazy_updim<const NEWDIM: usize>(&self, size: [usize; NEWDIM]) {}
15 }
16
17 struct BMap<'a, R, T: Broadcastable, F: Fn(T::Element) -> R, const DIM: usize> {
18     reference: &'a T,
19     closure: F,
20 }
21
22 impl<'a, R, T: Broadcastable, F: Fn(T::Element) -> R, const DIM: usize> TensorDimension
23     for BMap<'a, R, T, F, DIM>
24 {
25     const DIM: usize = DIM;
26 }
27 impl<'a, R, T: Broadcastable, F: Fn(T::Element) -> R, const DIM: usize> TensorSize
28     for BMap<'a, R, T, F, DIM>
29 {
30     fn size(&self) -> [usize; DIM] {
31         //~^ ERROR: method not compatible with trait [E0308]
32         self.reference.size()
33         //~^ ERROR: unconstrained generic constant
34         //~| ERROR: mismatched types
35     }
36 }
37
38 fn main() {}