diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/test/ui/autoref-autoderef/deref-into-array.rs | 17 | ||||
| -rw-r--r-- | src/test/ui/const-generics/deref-into-array-generic.rs | 27 |
2 files changed, 44 insertions, 0 deletions
diff --git a/src/test/ui/autoref-autoderef/deref-into-array.rs b/src/test/ui/autoref-autoderef/deref-into-array.rs new file mode 100644 index 00000000000..855a82d2f9c --- /dev/null +++ b/src/test/ui/autoref-autoderef/deref-into-array.rs @@ -0,0 +1,17 @@ +// check-pass + +struct Test<T>([T; 1]); + +impl<T> std::ops::Deref for Test<T> { + type Target = [T; 1]; + + fn deref(&self) -> &[T; 1] { + &self.0 + } +} + +fn main() { + let out = Test([(); 1]); + let blah = out.len(); + println!("{}", blah); +} diff --git a/src/test/ui/const-generics/deref-into-array-generic.rs b/src/test/ui/const-generics/deref-into-array-generic.rs new file mode 100644 index 00000000000..7d75af12bdf --- /dev/null +++ b/src/test/ui/const-generics/deref-into-array-generic.rs @@ -0,0 +1,27 @@ +// check-pass + +struct Test<T, const N: usize>([T; N]); + +impl<T: Copy + Default, const N: usize> Default for Test<T, N> { + fn default() -> Self { + Self([T::default(); N]) + } +} + +impl<T, const N: usize> std::ops::Deref for Test<T, N> { + type Target = [T; N]; + + fn deref(&self) -> &[T; N] { + &self.0 + } +} + +fn test() -> Test<u64, 16> { + let test = Test::default(); + println!("{}", test.len()); + test +} + +fn main() { + test(); +} |
