如何解决如果初始化成员,嵌套结构中的变体C ++编译错误
我正在尝试将std :: variant用于复杂结构,我尝试使用此代码:
示例1
#include <variant>
struct A {
int i = 1;
};
struct B {
bool flag = false;
};
struct dataVariant {
using Member = std::variant<A,B>;
Member data;
};
int main() {
auto d = dataVariant{};
}
这可行。
然后我尝试以这种方式嵌套struct A
和struct B
:
示例2:
#include <variant>
struct dataVariant {
struct A {
int i = 1;
};
struct B {
bool flag = false;
};
using Member = std::variant<A,B>;
Member data;
};
int main() {
auto d = dataVariant{};
}
编译器给我这个错误:
<source>: In function 'int main()':
<source>:16:26: error: use of deleted function 'std::variant<_Types>::variant() [with _Types = {dataVariant::A,dataVariant::B}]'
16 | auto d = dataVariant{};
| ^
In file included from <source>:1:
/opt/compiler-explorer/gcc-10.2.0/include/c++/10.2.0/variant:1347:7: note: 'std::variant<_Types>::variant() [with _Types = {dataVariant::A,dataVariant::B}]' is implicitly deleted because the default definition would be ill-formed:
1347 | variant() = default;
| ^~~~~~~
/opt/compiler-explorer/gcc-10.2.0/include/c++/10.2.0/variant:1347:7: error: use of deleted function 'constexpr std::_Enable_default_constructor<false,_Tag>::_Enable_default_constructor() [with _Tag = std::variant<dataVariant::A,dataVariant::B>]'
In file included from /opt/compiler-explorer/gcc-10.2.0/include/c++/10.2.0/variant:38,from <source>:1:
/opt/compiler-explorer/gcc-10.2.0/include/c++/10.2.0/bits/enable_special_members.h:110:15: note: declared here
110 | constexpr _Enable_default_constructor() noexcept = delete;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
尝试一下后,我发现如果不初始化该结构的成员,则会编译它:
示例3:
#include <variant>
struct dataVariant {
struct A {
int i;
};
struct B {
bool flag;
};
using Member = std::variant<A,B>;
Member data;
};
int main() {
auto d = dataVariant{};
}
现在我不明白编译错误,也许我想念一些东西,但是为什么它是全局结构而不是嵌套结构初始化而编译?
注意:我尝试使用GCC 10.2
和-std=c++20
或-std=c++17
标志对其进行编译。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。