问题描述
我正在尝试将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 (将#修改为@)