I can confirm that the test passes on Apple's version of objective-c+
+. But this is probably because Apple's objective-c++ compiler is
based on 4.0 and is passing by accident. We have not hashed out
overload resolution in the presence of an 'id' type, even tough the
test case does not require this logic. This test may fail on Apple'c
objective-c++ in some other forms where overload resolution logic is
required.
- Fariborz
On Nov 11, 2006, at 9:15 PM, frederiksmith1942@xxxxxxxxxxxx wrote:
I've run into some problems with Objective-C++ while using the gcc-
4.2-20061107 snapshot.
Passing a statically typed Objective-C object to a C++ function
with a parameter of type id works fine. However, I get compilation
errors when passing the same statically typed Objective-C object to
a method of a C++ class that has a parameter of type id.
I'm also getting errors when (in this case) I'm passing Objective-C
classes of type Test, but declared to be of type id, to C++ object
methods expecting an argument of type Test*.
I'm getting these errors:
test.mm: In function 'int main(int, char**)':
test.mm:51: error: no matching function for call to
'printer::print_Test(objc_object*&)'
test.mm:33: note: candidates are: void printer::print_Test(Test*)
test.mm:53: error: no matching function for call to
'printer::print_id(Test*&)'
test.mm:37: note: candidates are: void
printer::print_id(objc_object*)
Here is the test.mm code in question:
----8<-----
#import <stdio.h>
#import <objc/Object.h>
@interface Test : Object {
int i;
}
-(id) init:(int)n;
-(id) print;
@end
@implementation Test
-(id) init:(int)n {
i = n;
return self;
}
-(id) print {
printf("%d\n", i);
return self;
}
@end
class printer {
public:
void print_Test(Test* test) {
[test print];
}
void print_id(id test) {
[test print];
}
};
int main(int argc, char** argv) {
Test* test_Test = [[Test alloc] init:100];
id test_id = [[Test alloc] init:200];
printer p;
p.print_Test(test_Test);
p.print_Test(test_id);
p.print_id(test_Test);
p.print_id(test_id);
return 0;
}
----8<-----
While I can't test it myself at the moment, this code reportedly
works fine with Apple's compiler [1][2]. Is this a bug/restriction
with GCC's implementation of Objective-C++, or is the above code
incorrect?
Frederik
References
[1] http://lists.apple.com/archives/Cocoa-dev/2006/Nov/msg00544.html
[2] http://lists.apple.com/archives/Cocoa-dev/2006/Nov/msg00545.html
Concerned about your privacy? Instantly send FREE secure email, no
account required
http://www.hushmail.com/send?l=480
Get the best prices on SSL certificates from Hushmail
https://www.hushssl.com?l=485