【发布时间】:2013-11-19 17:40:52
【问题描述】:
当我执行以下代码时,Delphi XE3 Update 2 出现内部编译错误:
unit Unit1;
interface
type
IHasValueR<T> = interface
function GetValue: T;
end;
IHasValueRw<T> = interface(IHasValueR<T>)
procedure SetValue(NewValue: T);
end;
TDummy = class(TInterfacedObject)
end;
TRefObj = class(TInterfacedObject, IHasValueR<Boolean>, IHasValueRw<Boolean>)
strict private
Value: Boolean;
public
constructor Create(Init_: Boolean);
function GetValue: Boolean;
procedure SetValue(NewValue: Boolean);
end;
TValueProviderFct<T, V> = reference to function(Input: T): V;
TBar<T; V: IHasValueRw<Boolean>> = class
strict private
FValueProviderFct: TValueProviderFct<T, V>;
public
constructor Create(ValueProviderFct_: TValueProviderFct<T, V>);
function GetValue(Input: T): Boolean;
end;
procedure TestIt();
implementation
procedure TestIt();
var
Foo: TRefObj;
Bar: TBar<TRefObj, IHasValueRw<Boolean>>;
begin
Foo := TRefObj.Create(true);
Bar := TBar<TRefObj, IHasValueRw<Boolean>>.Create(
function (Input: TRefObj): IHasValueRw<Boolean>
begin
Result := Input;
end
);
Bar.GetValue(Foo);
end;
{ TSetupDefinitionItemBoolean }
constructor TRefObj.Create(Init_: Boolean);
begin
Value := Init_;
end;
function TRefObj.GetValue: Boolean;
begin
Result := Value;
end;
procedure TRefObj.SetValue(NewValue: Boolean);
begin
Value := NewValue;
end;
{ TBar<T, V> }
constructor TBar<T, V>.Create(ValueProviderFct_: TValueProviderFct<T, V>);
begin
FValueProviderFct := ValueProviderFct_;
end;
function TBar<T, V>.GetValue;
begin
Result := FValueProviderFct(Input).GetValue;
end;
end.
错误消息:
[dcc32 致命错误] Unit1.pas(83): F2084 内部错误: C13823
解决方案只是将 GUID 添加到接口。
任何人都可以验证这一点吗? 它可能已经在较新的 Delphi 版本中修复了吗? 我们可以在哪里提交错误报告?
【问题讨论】:
-
除非当前版本 XE5 存在问题,否则提交错误报告毫无意义
-
在此处提交错误:qc.embarcadero.com/wc/qcmain.aspx 但正如大卫所说,因为它已经修复了,所以毫无意义
-
为已解决的错误提交错误报告绝不是毫无意义的——它们至少是文档。他们还可能为将来提供测试用例以防止回归。
-
第 83 行是什么?为什么不标记或引用,或者我们真的需要计算所有这些行吗? :-(
标签: delphi interface delphi-xe3