当 boost 变量可以容纳多种类型时,为什么不能使用不同类型的三元运算符?

Ane*_*ees 2 c++ boost

我有类似下面的东西,但无法编译它。我不明白为什么当我的变量可以保存不同类型时我不能有不同的类型?

我的代码:

#include <boost/variant.hpp>
#include <iostream>

typedef boost::variant<int, float, double, std::string> MultiType;

int main() {
    int a = 1;
    std::string b = "b";
    bool c = true;
    MultiType d = c ? a : b;
    return 0;
}

Run Code Online (Sandbox Code Playgroud)

错误:

错误 C2446 ':':没有从 'std::string' 到 'int' 的转换

Cal*_*eth 7

表达式c ? a : b必须有类型。std::string和之间没有公共类型int,因此表达式无效。

std::string和之间有一个公共类型MultiType,并且int和之间有一个公共类型MultiType,因此c ? MultiType{ a } : b是一个有效的表达式,如下c ? a : MultiType{ b }