三項演算子の戻り値に基底クラスと派生クラスを入れた場合、派生クラスの型は基底クラスに変換できないため、 どちらからも共通して変換できる基底クラスが戻ってくる 。
コード協力: H氏
#include <iostream> struct A { int func() const { return 0; } }; struct B : public A { int func() const { return 1; } }; int main() { if (true) { for (int format = 0; format < 2; format++) { A a; B b; const auto& x = format == 0 ? a : b; std::cout << typeid(x).name() << " " << x.func() << std::endl; } } return 0; }
出力は
struct A 0 struct A 0
となる。つまり、クラス A
を入れてもクラス B
を入れても、戻ってくる型は A
となる。