diff --git a/src/ddmd/id.d b/src/ddmd/id.d index cfa0df7de7c4..bacfb6333de8 100644 --- a/src/ddmd/id.d +++ b/src/ddmd/id.d @@ -347,6 +347,7 @@ immutable Msgtable[] msgtable = { "isTemplate" }, { "isPOD" }, { "isDeprecated" }, + { "isFuture" }, { "isNested" }, { "isFloating" }, { "isIntegral" }, diff --git a/src/ddmd/traits.d b/src/ddmd/traits.d index b8da8e660f2d..0ae3319275f4 100644 --- a/src/ddmd/traits.d +++ b/src/ddmd/traits.d @@ -67,6 +67,7 @@ shared static this() "isArithmetic", "isAssociativeArray", "isDeprecated", + "isFuture", "isFinalClass", "isPOD", "isNested", @@ -470,6 +471,10 @@ extern (C++) Expression semanticTraits(TraitsExp e, Scope* sc) { return isDsymX(t => t.isDeprecated()); } + if (e.ident == Id.isFuture) + { + return isDeclX(t => t.isFuture()); + } if (e.ident == Id.isStaticArray) { return isTypeX(t => t.toBasetype().ty == Tsarray); diff --git a/test/runnable/test17878.d b/test/runnable/test17878.d new file mode 100644 index 000000000000..77b5a52bb28a --- /dev/null +++ b/test/runnable/test17878.d @@ -0,0 +1,19 @@ +@__future int foo() +{ + return 0; +} + +int bar() +{ + return 1; +} + +@__future int c; + + +void main() +{ + static assert(__traits(isFuture, foo)); + static assert(!__traits(isFuture, bar)); + static assert(__traits(isFuture, c)); +}