Чтение TDPL о функциях и литералах делегатов (5.6.1)
auto f = (int i) {};
assert(is(f == function));
У меня ошибка подтверждения. Это утверждение верно?
Я попробовал следующее:
int z = 5;
auto f = (int i) { return i < 5; };
auto d = (int i) { return i < z; };
assert(is(typeof(f) == typeof(d)));
Утверждение действительно там. На самом деле f - это делегат, а не функция, даже если для доступа к локальным переменным не требуется указатель кадра. Это ошибка?
Кроме того, я не понимаю, как assert(is(f == function));
должен работать.
Я пытался assert(is(f == delegate));
, но это также не удалось. Что не так?
Я использую DMD32 D Compiler v2.053
UPDATE
auto f = (int i) {};
assert(is(typeof(f) == delegate))
Работает правильно, хотя нет никаких причин быть делегатом
Но
auto f = function (int i) {};
assert(is(typeof(f) == void function(int))); // correct
assert(is(typeof(f) == function)); // failed!!!!!
Miracle. Кажется, D2 еще не готов к использованию.