我已经将我的开发机器更新到刚刚发布的 Ubuntu 12.04 版本,这显然给了我一个新版本的 GCC (4.6.3)。现在,用于编译的源代码给了我关于编译器生成的赋值运算符的错误:
source/local.cpp:1185:59: 错误:'olddata = stype::block_t((*(const oc::json_t*)(& local::database_t::getData(const sdata) 中的 'operator=' 不匹配::uuid_t&, size_t*, sdata::override::type_t)((* & uuid), (& otype), (sdata::override::type_t)1u))), 0)' 来源/local.cpp:1185:59:注意:候选人是: source/sdata/block.hpp:13:7: 注意: sdata::block_t& sdata::block_t::operator=(sdata::block_t&) source/sdata/block.hpp:13:7: 注意:参数 1 没有从 'sdata::block_t' 到 'sdata::block_t&' 的已知转换
据我所知,编译器生成的operator=
应该有签名foo& operator=(const foo&)
,而不是foo& operator=(foo&)
. 这是这个版本的 GCC 中的一个错误,还是我的理解错误?我在 GCC bug-tracker 上找不到任何对此的引用,而且我不敢相信没有其他人遇到过它。
(谷歌并没有让搜索包含等号的术语变得容易,但耐心地我在这里找到了一个对这个问题的引用,讨论 GCC 4.6.2。)