I hate such disputes, trust me... sigh
There is interface-oriented AAA (yep, I've read Sutter and his articles).
There is type-oriented... huh, let's call it 98
AAA is nice-looking. 98 is bulky.
AAA is theorectically perfect. 98 has theoretical pitfalls.
Yes, they are more theorethical than practical since function signature is rarerly changed.
You have much more chances to inject bug e.g. in logic or catch a problem with implicit casting from SharedPtr to T*.
98 is used for all legacy code. AAA is used nowhere.
98 is simpler to understand. AAA is more puzzled.
I don't say that AAA has no benefits.
However, I think that benefits of 98 cost more than benefits of AAA when we are talking about Urho (old big project).
If we were talking about new small project, AAA'd be better.
If we were talking about new big project... questionable. Maybe I have to try big AAA project at some point.
Then we will have to write some migration script to Find&Replace old enums with new ones in client (and Urho) code.
With the change to c++11 we could maybe re-evaluate using our custom containers vs the stl.
Unsure that it's good idea. This will break a lot of code unless wrappers over STL are written.