C++17 の variant での同一型のエラーが typedef 越しだと分かりづらい ― 2020年05月05日 12時45分32秒
variant は型で指定するので、同じ型を複数回入れる意味は無い。
同じ型を渡すとエラーになる。
#include <variant>
int main()
{
std::variant< int, int > number;
number = 3;
}
% c++ -std=c++17 variant_same_type.cpp
variant_same_type.cpp:6:12: error: no viable overloaded '='
number = 3;
~~~~~~ ^ ~
/usr/include/c++/v1/variant:1215:12: note: candidate function not viable: no
known conversion from 'int' to 'const std::__1::variant
ところがちょっと困ったことが起こった。typedef である。typedef へそれぞれの処理に都合の良い型に、名前を変換している事も多々ある。そして、int32 等のプラットフォーム非依存の、大きさ指定の型もコンパイル時に最終的な型の大きさが変わる。
int 型と integer 型をしている。
#include <variant>
typedef int integer;
int main()
{
std::variant< int, integer > number;
number = 3;
}
integer 型を int 型と報告してくれてはいるが、微妙に厄介。
% c++ -std=c++17 variant_typedef.cpp
variant_typedef.cpp:8:12: error: no viable overloaded '='
number = 3;
~~~~~~ ^ ~
/usr/include/c++/v1/variant:1215:12: note: candidate function not viable: no
known conversion from 'int' to 'const std::__1::variant
次回。
最近のコメント