blob: d7d0496abba5166189f547cb27eb68c3b67d67a7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
program toperator91;
{$mode delphi}
type
TString80 = String[80];
TString90 = String[90];
TString40 = String[40];
TString100 = String[100];
TTest = record
class operator Explicit(const aArg: TTest): TString80;
class operator Explicit(const aArg: TTest): TString90;
class operator Explicit(const aArg: TTest): ShortString;
class operator Implicit(const aArg: TTest): TString80;
class operator Implicit(const aArg: TTest): TString90;
class operator Implicit(const aArg: TTest): ShortString;
end;
var
ExplicitString80: LongInt;
ExplicitString90: LongInt;
ExplicitShortString: LongInt;
ImplicitString80: LongInt;
ImplicitString90: LongInt;
ImplicitShortString: LongInt;
class operator TTest.Explicit(const aArg: TTest): TString80;
begin
Writeln('TString80 Explicit');
Inc(ExplicitString80);
Result := '';
end;
class operator TTest.Explicit(const aArg: TTest): TString90;
begin
Writeln('TString90 Explicit');
Inc(ExplicitString90);
Result := '';
end;
class operator TTest.Explicit(const aArg: TTest): ShortString;
begin
Writeln('ShortString Explicit');
Inc(ExplicitShortString);
Result := '';
end;
class operator TTest.Implicit(const aArg: TTest): TString80;
begin
Writeln('TString80 Implicit');
Inc(ImplicitString80);
Result := '';
end;
class operator TTest.Implicit(const aArg: TTest): TString90;
begin
Writeln('TString90 Implicit');
Inc(ImplicitString90);
Result := '';
end;
class operator TTest.Implicit(const aArg: TTest): ShortString;
begin
Writeln('ShortString Implicit');
Inc(ImplicitShortString);
Result := '';
end;
var
s80: TString80;
s90: TString90;
s40: TString40;
s100: TString100;
t: TTest;
begin
// Explicit
s80 := TString80(t);
if ExplicitString80 <> 1 then
Halt(1);
s90 := TString90(t);
if ExplicitString90 <> 1 then
Halt(2);
s40 := TString40(t);
if ImplicitShortString <> 1 then
Halt(3);
s100 := TString100(t);
if ImplicitShortString <> 2 then
Halt(4);
// Implicit
s80 := t;
if ImplicitShortString <> 3 then
Halt(5);
s90 := t;
if ImplicitShortString <> 4 then
Halt(6);
s40 := t;
if ImplicitShortString <> 5 then
Halt(7);
s100 := t;
if ImplicitShortString <> 6 then
Halt(8);
Writeln('ok');
end.
|