Литералы функций и делегатов в D

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

7
задан Stas 21 June 2011 в 21:36
поделиться