Чтение 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!!!!!
Чудо. Похоже, D2 еще не готов к производственному использованию.