Test case:
---------------
static assert({
if (int x = 5) {}
return true;
}());
void main(){}
---------------
x.d(4): Error: cannot evaluate delegate bool()
{
if (int x = int x = 5;
, x)
{
}
return true;
}
() at compile time
x.d(1): Error: static assert (delegate bool()
{
if (int x = int x = 5;
, x)
{
}
return true;
}
()) is not evaluatable at compile time
---------------
This bug was introduced in commit 269a344 as a fix to bug 3688.
The direct consequence is std.traits.functionAttributes is no longer usable.
------------------
import std.traits;
struct S {
pure int f();
}
enum g = functionAttributes!(S.f);
------------------
/usr/include/phobos/std/traits.d(363): Error: cannot evaluate demangleFunctionAttributes("NaZi"c) at compile time
------------------
Comment #1 by kennytm — 2011-05-29T07:32:54Z
To workaround this fors std.traits.functionAttributes:
diff --git a/std/traits.d b/std/traits.d
index 47ee059..67f14ad 100644
--- a/std/traits.d
+++ b/std/traits.d
@@ -89,7 +89,8 @@ private
// FuncAttr --> empty | Na | Nb | Nc | Nd | Ne | Nf
while (mstr.length >= 2 && mstr[0] == 'N')
{
- if (FunctionAttribute att = LOOKUP_ATTRIBUTE[ mstr[1] ])
+ FunctionAttribute att = LOOKUP_ATTRIBUTE[ mstr[1] ];
+ if (att)
{
atts |= att;
mstr = mstr[2 .. $];