对于这个简单的代码
#include <vector>
#include <variant>
#include <stdint.h>
using KFPGAData = std::variant<uint16_t>;
int main(int,char**)
{
int v = 10;
KFPGAData d = v;
return 0;
}
使用 gcc 用 -std=c++17 编译它 gcc9 编译通过,但上面的 gcc10 编译失败:
<source>:11:19: error: conversion from 'int' to non-scalar type 'KFPGAData' {aka 'std::variant<short unsigned int>'} requested
11 | KFPGAData d = v;
| ^
为什么会出现这种情况?我尝试了其他高版本的 msvc 和 clang 编译器,它们都产生了类似的错误
来自https://en.cppreference.com/w/cpp/utility/variant/variant强调我的:
转换构造函数。构造一个包含替代类型 T_j 的变体,如果类型中的每个 T_i 存在虚函数 F(T_i) 的重载,则该变体将通过表达式 F(std::forward(t)) 的重载决议进行选择...,但不考虑缩小转换。