【发布时间】:2018-03-14 09:49:13
【问题描述】:
考虑这段代码:
#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。
【问题讨论】:
-
如果它安慰你,
std::make_unique和家人有同样的限制:( -
聚合初始化一直是C++初始化系统的眼中钉
标签: c++ c++17 variant aggregate-initialization