@interface A {
@public
int ivar;
}
@property int prop;
@end
typedef struct objc_object {
Class isa;
} *id;
A *get_an_A(unsigned);
id get_an_id(unsigned);
template<unsigned N, typename T, typename U, typename V>
void f(U value, V value2) {
get_an_A(N)->ivar = value; get_an_A(N).prop = value2; T c = get_an_id(N)->isa; }
template void f<6, Class>(int, int); template void f<7, Class>(int*, int); template void f<8, Class>(int, double*); template void f<9, int>(int, int);
template<typename T, typename U, typename V>
void f2(T ptr, U value, V value2) {
ptr->ivar = value; ptr.prop = value2; }
template void f2(A*, int, int);
template void f2(A*, int*, int); template void f2(A*, int, double*);
template<typename T, typename U>
void f3(U ptr) {
T c = ptr->isa; }
template void f3<Class>(id); template void f3<int>(id);
@interface B
- (int)foo;
- (void)setFoo:(int)value;
@end
template<typename T>
void f4(B *b, T value) {
b.foo = value; }
template void f4(B*, int);
template void f4(B*, int*);
template<typename T, typename U>
void f5(T ptr, U value) {
ptr.foo = value; }
template void f5(B*, int);
template void f5(B*, int*);