使用-std = c 11时,以下代码在
gcc 4.9.1和clang-3.6中编译和运行:
struct Bar { int x; }; struct Foo { static constexpr Bar bars[] = {1,2,3}; }; constexpr Bar Foo::bars[];
但是,它在gcc 4.8.3中失败,导致错误消息
./cpptest.cpp:14:43: error: Could not convert '1' from 'int' to 'const Bar' static constexpr Bar bars[] = {1,3}; ^ ./cpptest.cpp:14:43: error: Could not convert '2' from 'int' to 'const Bar' ./cpptest.cpp:14:43: error: Could not convert '3' from 'int' to 'const Bar'
顺便说一下,如果我做同样的事情,但使条形成一个静态的const全局数组,它在gcc 4.8和clang中编译得很好.如果我用一对额外的{}包围列表中的每个整数文字,它也会编译得很好.
这是gcc 4.8中的一个错误吗?标准所说的是适当的语法?当我省略额外的括号时,调用了c 11统一初始化标准的哪一部分?
编辑:看起来标准说这应该调用聚合初始化,这应该允许“支持elision”.所以它似乎是gcc 4.8中的一个错误,这是由gcc 4.9修复的,但我对阅读标准并不是很有信心.我也似乎无法在gcc的bug追踪器中发现任何有关此问题的错误报告,所以我很容易出错.
解决方法
原文地址:https://www.jb51.cc/c/118644.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。