首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用模板和继承打破严格的混叠规则

使用模板和继承打破严格的混叠规则
EN

Stack Overflow用户
提问于 2018-12-13 15:44:33
回答 1查看 215关注 0票数 9

下面的代码在gcc中警告我,我违反了严格的别名规则:

代码语言:javascript
复制
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;

当我删除模板时,似乎编译得很好。

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-13 15:48:29

不,在提供的代码中不存在严格的混叠规则冲突。看上去像gcc身上的窃听器。

您可以向gcc提交一个bugreport (我在那里找不到与所提供的代码片段有关的任何内容),但是,从bug.cgi?id=41874的生命和时间来看,我不希望立即修复。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53765418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档