public struct TestData : ITest<TestData> {
    public override string val() {
        return "bla";
    }
}

public interface ITest<T> {
    public abstract T val();
}

void main() {
    TestData td = TestData();
}

