Wal*_*ter 8 c++ inner-classes language-lawyer noexcept c++11
struct foo
{
struct bar {
~bar() {} // no error w/o this line
};
bar *data = nullptr; // no error w/o this line
foo() noexcept = default; // no error w/o this line
};
Run Code Online (Sandbox Code Playgroud)
是的,我知道,还有另一个问题具有完全相同的标题,但是有一个不同的问题(涉及noexcept 运算符而没有嵌套类型).该解决方案建议有(取代的构造foo与
foo() noexcept {}
Run Code Online (Sandbox Code Playgroud)
)改变语义,这里没有必要:这里我们有一个更好的答案(因此问题不是重复).
编译器:Apple LLVM version 9.0.0 (clang-900.0.37),完整的错误信息:
test.cc:44:5: error: default member initializer for 'data' needed within definition of enclosing class 'foo' outside of member functions
foo() noexcept = default;
^
test.cc:41:10: note: default member initializer declared here
bar* data = nullptr;
^
Run Code Online (Sandbox Code Playgroud)
通过默认嵌套类的析构函数可以解决该问题
struct foo
{
struct bar {
~bar() = default; // this fixes it
};
bar *data = nullptr; // no error w/o this line
foo() noexcept = default; // no error w/o this line
};
Run Code Online (Sandbox Code Playgroud)
但是,我不清楚为什么/标准是否要求这样做。
| 归档时间: |
|
| 查看次数: |
891 次 |
| 最近记录: |