по умолчанию вычисляется компилятором. Таким образом, они должны быть постоянными выражениями. И адрес функции не известен во время компиляции и, следовательно, не является постоянным выражением. Отсюда сообщение об ошибке.
Полезно понять, как компилятор реализует параметры по умолчанию. Предположим, у вас есть функция, как это:
procedure foo(bar: Integer = 666);
Теперь предположим, что в какой-то другой точке программы вы вызываете эту функцию и опустить параметр, например:
foo();
Компилятор преобразует этот вызов заменяя по умолчанию параметры:
foo(666);
а затем компилирует это. Поскольку единицы компилируются целиком, следует, что параметры по умолчанию должны быть постоянными выражениями.
Как следствие, вы не можете указать параметр по умолчанию для своей функции, что просто невозможно. Вместо этого вы можете использовать перегрузку метода для достижения той же цели.
procedure Something(const Foo: TFoo); overload;
begin
// do something with Foo
end;
procedure Something(); overload; inline;
begin
Something(FooA);
end;
Использование инлайн заставляет компилятор переводить
Something();
в
Something(FooA);
это именно то, что вы пытаетесь достичь с помощью параметра по умолчанию.
Уверены ли вы? Это возможно в C++. http://paste.ie/view/a2cc6224 – user15124
Вы спрашиваете о Delphi или C++? –
Про Delphi, очевидно. Но это должно работать так же, как в C++. Увы, это не так. – user15124