On Sun, 6 Oct 2019 17:03:10 -0400 Ryan Joseph <generic...@gmail.com> wrote:
>[...] > > 2. > > DoThis(1,200) gives range check warning instead of error. A warning > > means there are some rare cases, where this code is correct. Is > > this a todo or do you see a useful case? > > Which test? Please post a sample. generic procedure DoThis<T>(a:T; b:T); begin end; begin DoThis(1,200); // 1 sets T to shortint, so the 200 gives a warning end; > > 3. > > timpfuncspez2.pp > > DoThis<T> > > DoThis<T,U> > > Delphi gives an error "Ambiguous call to DoThis". FPC silently > > selects the one with only one param. IMO this is dangerous, it > > should give an error. generic function DoThis<T>(a: T): T; overload; begin end; generic function DoThis<T,U>(a: T): U; overload; begin end; begin DoThis(3); // both fits, should give an error end; >[...] > > 4. > > Why does timpfuncspez6 fail? > > It works in Delphi. > > The comment has an explanation, which looks wrong to me: > > > > generic procedure DoThis<T,U>(msg: T; param1: U; param2: TObject); > > begin > > end; > > > > begin > > DoThis('aa', 'aa', TObject.Create); > > // wil be specialized as DoThis(msg: integer; param1: > > TObject; param2: TObject) > > // so we expect an incompatible type error > > DoThis(1, 1, TObject.Create); > > end. > > That doesn’t make sense to me either so I need to study it. Both > should fail actually as I designed it (for now). Why? > How does Delphi implicitly specialize this? DoThis(1,1,nil); // T and U become shortint DoThis('aa','aa',nil); // T and U become string Mattias _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal