Android C++;使用TObject子代调用std::vector::push_时发生生成器bccarm错误 P>我有一些简单的C++代码,它不能由C++ C++ Builder 10.1柏林的CLAN 11编译器BCCAARM编译。

Android C++;使用TObject子代调用std::vector::push_时发生生成器bccarm错误 P>我有一些简单的C++代码,它不能由C++ C++ Builder 10.1柏林的CLAN 11编译器BCCAARM编译。,android,c++,c++builder,firemonkey,c++builder-10.1-berlin,Android,C++,C++builder,Firemonkey,C++builder 10.1 Berlin,代码如下: TComponent* Comp = new TComponent(this); std::vector<TComponent*> Comps; Comps.push_back(Comp); TComponent*Comp=新的TComponent(此); std::向量Comps; 组件推回(组件); 这就是错误: [bccaarm error]stl_iterator.h(963):对类型的右值引用 “值类型”(又名“系统:类::TComponent*\uuuu-

代码如下:

TComponent* Comp = new TComponent(this);
std::vector<TComponent*> Comps;
Comps.push_back(Comp);
TComponent*Comp=新的TComponent(此);
std::向量Comps;
组件推回(组件);
这就是错误:

[bccaarm error]stl_iterator.h(963):对类型的右值引用 “值类型”(又名“系统:类::TComponent*\uuuu-strong”)不能为空 绑定到类型为“\uuuBorland\uClass*isTObj\uuuu strong”的左值(又名 'System::Classes::TComponent*\uuu strong')

编译器在文件stl_iterator.h的第963行停止:

< >其他C++编译器Bcc32和Bcc32 C(也基于CLAN)对该代码没有任何问题。 当
Comp
不是来自type
TComponent
TObject
的另一个后代时,代码编译没有任何问题

我不知道这个代码有什么问题,为什么R和L值有问题


有人知道在这里做什么吗

要编译上述代码,必须将向量类型定义为不安全指针

TComponent* Comp = new TComponent(this);
std::vector<__unsafe TComponent*> Comps;
Comps.push_back(Comp);
TComponent*Comp=新的TComponent(此);
std::向量Comps;
组件推回(组件);
我为我遇到的另一个问题提出了一个支持理由。embarcadero支持部门向我提供了以下信息,我将其应用于此问题,并且似乎有效:

\uuuu unsafe
告诉编译器将处理对象生命周期,并且不会为对象生成ARC代码

有关此主题的详细信息:


英文翻译如下:
[bccaarm error]stl_iterator.h(963):对类型“value_type”(又名“System:classes::TComponent*u strong”)的右值引用不能绑定到类型为“u borland_class*isTObj_ustrong”(又名“System::classes::TComponent*u strong”)的左值。
移动编译器,像bccaarm一样,实现对象ARC(这是
\u strong
发挥作用的地方),但桌面编译器没有,这就是代码在bcc32和bcc32c中编译的原因。我希望这段代码在ARC下编译得很好,尽管我觉得
std::vector::iterator::operator*
使用
std::move()
很奇怪。操作符应该返回对向量中现有项的引用,不应该涉及移动。可能是STL错误?@RemyLebeau:添加“不安全”有帮助(见答案),但仍不清楚STL中是否有错误。。。