Generic'и и области видимости

Любые обсуждения, не нарушающие правил форума.

Модератор: Модераторы

Generic'и и области видимости

Сообщение Brainenjii » 25.11.2011 09:24:59

Пишем простенький проект:
  • Unit1:
    Код: Выделить всё

    Unit Unit1;

    Interface

    Type
      Generic TFirstGeneric<T> = Class
      Private
        fField: Integer;
      Public
        Constructor Create;
    End;

    Implementation

    Constructor TFirstGeneric.Create;
    Begin
      fField := 100;
    End;

    End.
  • Unit2:
    Код: Выделить всё
    Unit Unit2;

    Interface

    Uses
      Unit1;

    Type
      Generic TSecondGeneric<T, U> = Class
      Private
        fFirst: U;
        fField: Integer;
      Public
        Property Field: Integer Read fField;
        Constructor Create;
    End;

    Implementation

    Constructor TSecondGeneric.Create;
    Begin
      fFirst := U.Create;
      fField := fFirst.fField + 1;
    End;

    End.
  • Project1:
    Код: Выделить всё
    program Project1;

    uses
      Unit1, Unit2;

    Type TBlank = Specialize TFirstGeneric<TObject>;

    Type TSample = Specialize TSecondGeneric<TObject, TBlank>;

    Var
      aSample: TSample;
    begin
      aSample := TSample.Create;
      WriteLn(aSample.Field); // 101
    end.

В Unit2 идёт обращение к приватному полю класса TBlank, компилятор с этим согласен, да и работает программа адекватно. Это документированная фича?
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Generic'и и области видимости

Сообщение Павел Ишенин » 27.11.2011 14:22:39

Это ошибка. Зарегистрируйте ее в bugs.freepascal.org
Павел Ишенин
постоялец
 
Сообщения: 475
Зарегистрирован: 24.03.2007 10:16:52


Вернуться в Потрепаться

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9

Рейтинг@Mail.ru