namespace X1 { typedef here[T] = T^; int dostuff(X1[T] this) { return 0; } } int test1() { X1[int] xx = @123; xx->dostuff(); return 0; } typedef incomplete X2[T] = T; namespace X2 { int dostuff(X2[T]^ this) { return 0; } } int test2() { X2[int]^ xx = @123; xx->dostuff(); return 0; } namespace X3 { typedef here[T] = (T^ x); int dostuff(X3[T]^ this) { return 0; } } int test3() { X3[int]^ xx = @(@123,); xx->dostuff(); return 0; }