Рассмотрим следующий код:
static if (!is(MyStruct))
{
struct MyStruct
{
}
}
static if (is(MyStruct))
{
static assert(0);
}
Я изначально считал, что порядок объявлений (в глобальной области видимости) не имеет значения в D.
Однако в данном случае порядок статических if
ов делает разницу между тем, компилируется программа или нет.
Таким образом, является ли этап оценки во время компиляции в D процедурной особенностью (как в C/C++), декларативной особенностью или чем-то другим? Каким он является в настоящее время, и каким он планируется быть (если эти два варианта отличаются)?
Я только что понял, что проблема даже не заканчивается здесь. Что произойдет, если static if
использует .tupleof
для перечисления членов текущего модуля и создаст проблему того же типа?