无法在std :: variant中使用相同的类型

时间:2017-12-17 20:05:52

标签: c++ c++17

我正在使用c ++ 17,并希望编写类似这样的代码,

#include <variant>
typedef int NewInt;
int main() {
    std::variant<NewInt, int> n = 1;
}

但是它会发出编译错误,

po.cpp: In function ‘int main()’:
po.cpp:5:35: error: conversion from ‘int’ to non-scalar type ‘std::variant<int, int>’ requested
     std::variant<NewInt, int> n = 1;
                               ^

我如何定义类似std::variant<NewInt, int>的类型,还是不可能?

1 个答案:

答案 0 :(得分:10)

类型别名只是现有类型的另一个名称,而不是新类型。所以你有两个整数的变体。虽然它是允许的,但你必须明确地解决歧义。 std::variant有一个合适的构造函数:

std::variant<NewInt, int> n{ std::in_place_index<0>, 1 };

以上将构造第一个整数成员(您的NewInt)。如果你想构建第二个,那就很明显了:

std::variant<NewInt, int> n{ std::in_place_index<1>, 1 };