jyknight added a comment.
In D67983#1723376 <https://reviews.llvm.org/D67983#1723376>, @thakis wrote:
> After this, Class can no longer be used as a key type in an Obj-C dictionary
> literal. Is that intentional?
Such code was already an on by default incompatible-pointer-types warning in
ObjC mode. That it worked in ObjC++ was accidental.
For example:
foo.m:
#import <Foundation/Foundation.h>
int main() {
NSDictionary* d = @{[NSArray class] : @"bar"};
}
Compiling:
$ clang -framework Foundation -o foo foo.m
foo.m:4:23: warning: incompatible pointer types passing 'Class' to parameter
of type 'id<NSCopying> _Nonnull' [-Wincompatible-pointer-types]
NSDictionary* d = @{[NSArray class] : @"bar"};
^~~~~~~~~~~~~~~
1 warning generated.
While the default metaclass does in fact implement the one method NSCopying
declares, it's not possible within the language to declare that the Class --
itself, as an instance -- implements the instance methods from the NSCopying
protocol.
You can fix the code just by doing `@{(id)clz : val}`, since id is freely
castable to anything.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D67983/new/
https://reviews.llvm.org/D67983
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits