У меня есть простой код C ++, который не будет компилироваться компилятором C ++ 11 на основе Clang bccaarm из C ++ Builder 10.1 Berlin.
Это код:
TComponent* Comp = new TComponent(this);
std::vector<TComponent*> Comps;
Comps.push_back(Comp);
И это ошибка:
[bccaarm error] stl_iterator.h (963): ссылка на тип значения
‘value_type’ (он же ‘System: classes :: TComponent * __strong’) не может быть
привязан к lvalue типа ‘__borland_class * isTObj __strong’ (он же
‘System :: Classes :: TComponent * __strong’)
Компилятор останавливается на строке 963 в файле stl_iterator.h:
Другие компиляторы C ++ bcc32 и bcc32c (также основанные на Clang) не имеют проблем с этим кодом.
когда Comp
не из типа TComponent
или другой потомок из TObject
код компилируется без проблем.
Я понятия не имею, что не так с этим кодом и почему существует проблема со значениями R и L …
Кто-нибудь знает, что здесь делать?
Чтобы получить скомпилированный код выше, тип вектора должен быть определен как небезопасный указатель
TComponent* Comp = new TComponent(this);
std::vector<__unsafe TComponent*> Comps;
Comps.push_back(Comp);
Я открыл случай поддержки для другой проблемы, которая у меня была. Поддержка embarcadero дала мне следующую информацию, которую я применил к этой проблеме, и она работает:
__unsafe
сообщает компилятору, что время жизни объекта будет обработано, и для объектов не будет создан код ARC
Подробнее об этой теме:
Других решений пока нет …