Nope, not a troll.
Objective-C is poor. For example, the most useful part of C++ are fast typed template containers.
This is also one of C++ weaknesses. Troubleshooting templates is a royal pain in the ass. I'd rather chase a pointer to hell and back than deal with another set of poorly-written templates. And templates are almost invariably poorly-written.
They are damned useful when done right, though.
Objective-C has only pointer containers which are untyped.
True, that. Objective-C sacrificed compile-time type checking for flexibility. Well-written Objective-C code is almost beautiful (something that can't be said even for well-written C++ code), but you really need to be careful with your types.
'Const' support? Nope.
RAII and smart pointers? Nope.
"Smart pointers" are really just a kludge to fix up a poor language design choice. RAII isn't all that vital in Objective-C, either.
You are attempting to say Objective-C is deficient because it doesn't support the design patterns you use in your C++ code, when those design patterns are necessary because of the language itself.
Memory management in Objective-C is quite convoluted, btw.
You ain't kidding. It's getting easier with each iteration of the language, but the GC is kinda particular. Conscientious use of refs is a must.
So almost nothing useful for general-purpose programming. Except maybe for inheritance.
Riiiight.
Again, I think you are judging Objective-C based on your C++ experience. Late binding, associated references, adding messages to existing classes at run-time, message forwarding, and so on are all excellent general-purpose programming idioms that aren't supported in C++. Couple that with introspection (which is supported in C++, to a degree), and you can write very powerful fully-OO programs.
Objective-C isn't perfect. No language is. But it certainly isn't as anemic as you seem to think.