@@ -471,7 +471,76 @@ fn foo() {
471471 244..246 '_x': {unknown}
472472 249..257 'to_bytes': fn to_bytes() -> [u8; _]
473473 249..259 'to_bytes()': [u8; _]
474- 249..268 'to_byt..._vec()': {unknown}
474+ 249..268 'to_byt..._vec()': Vec<<[u8; _] as Foo>::Item>
475+ "# ] ] ,
476+ ) ;
477+ }
478+
479+ #[ test]
480+ fn regression_21315 ( ) {
481+ check_infer (
482+ r#"
483+ struct Consts;
484+ impl Consts { const MAX: usize = 0; }
485+
486+ struct Between<const M: usize, const N: usize, T>(T);
487+
488+ impl<const M: usize, T> Between<M, { Consts::MAX }, T> {
489+ fn sep_once(self, _sep: &str, _other: Self) -> Self {
490+ self
491+ }
492+ }
493+
494+ trait Parser: Sized {
495+ fn at_least<const M: usize>(self) -> Between<M, { Consts::MAX }, Self> {
496+ Between(self)
497+ }
498+ fn at_most<const N: usize>(self) -> Between<0, N, Self> {
499+ Between(self)
500+ }
501+ }
502+
503+ impl Parser for char {}
504+
505+ fn test_at_least() {
506+ let num = '9'.at_least::<1>();
507+ let _ver = num.sep_once(".", num);
508+ }
509+
510+ fn test_at_most() {
511+ let num = '9'.at_most::<1>();
512+ }
513+ "# ,
514+ expect ! [ [ r#"
515+ 48..49 '0': usize
516+ 182..186 'self': Between<M, _, T>
517+ 188..192 '_sep': &'? str
518+ 200..206 '_other': Between<M, _, T>
519+ 222..242 '{ ... }': Between<M, _, T>
520+ 232..236 'self': Between<M, _, T>
521+ 300..304 'self': Self
522+ 343..372 '{ ... }': Between<M, _, Self>
523+ 353..360 'Between': fn Between<M, _, Self>(Self) -> Between<M, _, Self>
524+ 353..366 'Between(self)': Between<M, _, Self>
525+ 361..365 'self': Self
526+ 404..408 'self': Self
527+ 433..462 '{ ... }': Between<0, N, Self>
528+ 443..450 'Between': fn Between<0, N, Self>(Self) -> Between<0, N, Self>
529+ 443..456 'Between(self)': Between<0, N, Self>
530+ 451..455 'self': Self
531+ 510..587 '{ ...um); }': ()
532+ 520..523 'num': Between<1, _, char>
533+ 526..529 ''9'': char
534+ 526..545 ''9'.at...:<1>()': Between<1, _, char>
535+ 555..559 '_ver': Between<1, _, char>
536+ 562..565 'num': Between<1, _, char>
537+ 562..584 'num.se..., num)': Between<1, _, char>
538+ 575..578 '"."': &'static str
539+ 580..583 'num': Between<1, _, char>
540+ 607..644 '{ ...>(); }': ()
541+ 617..620 'num': Between<0, 1, char>
542+ 623..626 ''9'': char
543+ 623..641 ''9'.at...:<1>()': Between<0, 1, char>
475544 "# ] ] ,
476545 ) ;
477546}
0 commit comments