以下の問題に直面したので、なぜこのような挙動になるのか、どうしたら解決できるか教えて下さい。
まず、以下のようなstd::pairと、const referenceをもつstd::pairがあります。
C++
1 using pair = std::pair<int, double>; 2 using pair_cc = std::pair<const int&, const double&>;
pairはpair_ccからコンストラクト可能です。
C++
1 const int i{}; 2 const double d{}; 3 pair_cc pcc{i, d}; 4 pair p1{pcc}; 5 pair p2{std::move(pcc)};
しかし、std::common_type_t<pair, pair_cc>を取得しようとすると、typeが存在しないとエラーが出ます。
C++
1 using type = std::common_type_t<pair, pair_cc>; 2 // no type named ‘type’ in ‘struct std::common_type<std::pair<int, double>, std::pair<const int&, const double&> >
明らかに共通の変換先が存在するのに、common_typeを取得できないのはなぜですか?
また、common_typeを取得できるようするためにはどうしたらいいですか?
ここによると、ユーザー定義の特殊化をすればいいようですが、プログラム定義型に依存していないのに特殊化してもいいのでしょうか。
どうかご教授ください。よろしくお願い申し上げます。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/07 14:32