// LINK: enum x = 10; enum Thing { A, B } enum IsThing(T) = is(T == enum) || (__traits(getLinkage, T) == "C++"); enum Is = IsThing!Thing; static assert(Is); enum Another(T) = is(T == int) && (__traits(getLinkage, T) == "C++"); static assert(!Another!Thing); T myFunc(T)() { return T.init; } enum Foo(T) = is(T == int) || myFunc!T(); void main () { assert(myFunc!int() == 0); }