Joe*_*Joe 6 c++ std map c++11 libc++
我收到以下错误:
class Test
{
std::map<std::string,Test> test;
};
Run Code Online (Sandbox Code Playgroud)
错误是"字段具有不完整类型'测试'".我读了一些线程,建议这可能是随xcode附带的libcxx版本中的一个错误,但如果我只需将其更改为:它就不会让我感到惊讶:
class Test
{
std::map<std::string,std::shared_ptr<Test>> test;
};
Run Code Online (Sandbox Code Playgroud)
我只想仔细检查这肯定是一个正确的错误,而不是一个错误.
干杯!
除非另有说明,否则该标准要求标准库的模板组件中使用的所有类型都必须完整.因此libc ++的错误是正确的.使用不完整类型是未定义的行为(§17.6.4.8[res.on.functions]/2),因此libstdc ++接受它也没有错.
您可以使用指针对象来构建完整类型.但你也可以使用一些第三方的集合库,允许不完全类型,例如,boost::container::map
被设计为允许不完全类型.
§17.6.4.8其他功能/ 2:
特别是,在以下情况下,效果未定义:
...
如果在实例化模板组件时将不完整类型(3.9)用作模板参数,除非特别允许该组件.
(即明确地允许不完全类型的唯一部件是declval
,unique_ptr
,default_delete
,shared_ptr
,weak_ptr
和enable_shared_from_this
.)
归档时间: |
|
查看次数: |
1995 次 |
最近记录: |