The iterator problem is caused by AATC's iterators being quite nonstandard indeed. The manual page for iterators and the first page of this topic explain the iteration syntax. Maybe I should implement a more standard iteration syntax for easier c++ -> AS conversion and keep the current syntax available under a different operator or function name. The iterator syntax was originally created to reduce AS function calls and to improve performance.
The string problem is probably caused by AATC expecting strings to be AS value types and your AS reftype string causing terrible confusions.
I did some testing with removing AATC's specialized string handling entirely, and treating strings as plain old objects or ref objects. Seemed to work pretty good with scriptstdstring, maybe it could help your reftype String as well.
If you want to try that route, make these changes to your AATC installation (and remove any other changes to strings):
In aatc_common.cpp, line 326
DATAHANDLINGTYPE Determine_Datahandlingtype(...){
...
return DATAHANDLINGTYPE::STRING
...
}
delete the part about "return DATAHANDLINGTYPE::STRING".
In aatc_container_shared.hpp, line 357
template<...> void autoregister::register_all_tempspec_basics_for_container(...){
...
tempspec_container_template<config::t::string>::Register(rs, "string");
}
delete the line regarding registering "string".
With these changes AATC will properly treat your reftype String as a reftype and you won't have to go changing "string" to "String" deep in the bowels of AATC after every update.
AATC will also no longer be able to use it's native hash function for strings automatically, because AATC is treating String as an AS type. You will have to register a hash function manually for your String class, if you need to use it with the hashing containers.
If this thing works out for you, I'll make it an option in aatc_config.hpp.