考虑这段代码:
#include <variant>
struct x {
int y;
};
int main() {
std::variant<x> v(std::in_place_type<x>, {3}); /*1*/
return std::get<x>(v).y;
}
这不会编译,{}
从行中删除时也不会编译/*1*/
,即使聚合初始化也是如此
x a{3};
x b({3});
以“类似构造函数”的形式工作。我能否以某种方式使std::variant
初始化程序意识到使用聚合初始化构造结构的可能性,而不必为可能在我的实际案例中使用的每个结构编写无聊的样板构造函数?
我希望这能以某种方式工作,根据cppreference有问题的两个重载 (5) 和 (6) 都说
构造具有指定替代 T 的变体并使用参数初始化包含的值[...]
如果这很重要,我正在使用 GCC 7。