下面的代码在gcc中警告我,我违反了严格的别名规则:
struct Base {
int field = 2;
};
template <typename T>
struct Specialization: public Base {
void method() {
Specialization copy;
field = copy.field;
}
};
int main() {
Specialization<int> s;
s.method();
}警告:取消引用类型双关指针将>打破严格的混叠规则- copy.field;
当我删除模板时,似乎编译得很好。
struct Base {
int field = 2;
};
struct Specialization: public Base {
void method() {
Specialization copy;
field = copy.field;
}
};
int main(){
Specialization s;
s.method();
}我是真的违反了严格的混叠规则,还是GCC制造了假阳性?
我在GCC8上使用GCC8
发布于 2018-12-13 15:48:29
不,在提供的代码中不存在严格的混叠规则冲突。看上去像gcc身上的窃听器。
您可以向gcc提交一个bugreport (我在那里找不到与所提供的代码片段有关的任何内容),但是,从bug.cgi?id=41874的生命和时间来看,我不希望立即修复。
https://stackoverflow.com/questions/53765418
复制相似问题