The test case compiles when exec method definition is moved down: template isQObjectType(T) { enum isQObjectType = is(T.__isQObjectType); }
template QTypeInfo(T) { static if (!isQObjectType!T) { enum size = T.sizeof; } } struct QList(T) { alias QTypeInfo!T TI; int x; void foo() { x++; } } interface IQGraphicsItem { } void exec(QList!(QAction) actions) {} abstract class QGraphicsObject : IQGraphicsItem { } class QGraphicsWidget : QGraphicsObject { } class QAction { final void associatedGraphicsWidgets(QList!(QGraphicsWidget) a) { QList!(QGraphicsWidget) x; } } void main() { }