<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
</head>
<body text="#000000" bgcolor="#FFFFFF">
Just asking this again, as I did not get any answer yet? <br>
<br>
Is that the indented behaviour, and if so what is the reasoning for
it?<br>
<div class="moz-forward-container"><br>
<br>
-------- Original Message --------
<table class="moz-email-headers-table" border="0" cellpadding="0"
cellspacing="0">
<tbody>
<tr>
<th valign="BASELINE" align="RIGHT" nowrap="nowrap">Subject:
</th>
<td>overload question (variant vs enum subrange)</td>
</tr>
<tr>
<th valign="BASELINE" align="RIGHT" nowrap="nowrap">Date: </th>
<td>Sun, 26 Jan 2014 19:48:42 +0000</td>
</tr>
<tr>
<th valign="BASELINE" align="RIGHT" nowrap="nowrap">From: </th>
<td>Martin Frb <a class="moz-txt-link-rfc2396E" href="mailto:lazarus@mfriebe.de"><lazarus@mfriebe.de></a></td>
</tr>
<tr>
<th valign="BASELINE" align="RIGHT" nowrap="nowrap">To: </th>
<td>FPC-Pascal users discussions
<a class="moz-txt-link-rfc2396E" href="mailto:fpc-pascal@lists.freepascal.org"><fpc-pascal@lists.freepascal.org></a></td>
</tr>
</tbody>
</table>
<br>
<br>
<pre>TFoo1 is a sub range of FFoo
And it seems to match both TFoo and variant.
> project1.lpr(24,3) Error: Can't determine which overloaded function to
> call
> project1.lpr(15,11) Hint: Found declaration: Bar(TFoo);
> project1.lpr(11,11) Hint: Found declaration: Bar(Variant);
No other type seems to be bothered by variant.
Also variant is the only type, that I found that conflicts with TFoo1
Why?
I know I can declare
procedure Bar(a: TFoo1); overload;
and it will solve it (even if I leave all the others, because it is an
exact match).
But why does a subrange of integer/byte work? Subrange of integer does
not give the error, even so it could match both.
program Project1;
{$mode objfpc}
{// $mode delpti}
type
TFoo = (a1,a2,a3,a4,a5);
TFoo1 = a2..a4;
TFoo2 = 1..3;
TFoo3 = byte(1)..(3);
procedure Bar(a: Variant); overload;
begin end;
procedure Bar(a: Integer); overload;
begin end;
procedure Bar(a: TFoo); overload;
begin end;
var
f1: TFoo;
f2: TFoo1;
f3: TFoo2;
f4: TFoo3;
begin
Bar(f2);
end.
</pre>
<br>
</div>
<br>
</body>
</html>