Я начал смотреть std::common_type
и не совсем уверен в своей цели и ее функциональности.
Несколько вещей по-прежнему кажутся мне странными:
- Порядок аргументов важен:
common_type<Foo, Bar, Baz>
может отличаться отcommon_type<Baz, Foo, Bar>
. Или может компилироваться, а другой - нет. Хотя это ясно из определенияcommon_type
, оно кажется странным и неинтуитивным. Это из-за отсутствия универсального решения или намерения? - Активация может привести к ошибке компилятора вместо того, что я могу обработать. Как проверить, действительно ли будет
common_type
компилировать?is_convertible
недостаточно, посколькуcommon_type
может быть специализированным? -
До сих пор нет способа определить общий тип в такой ситуации:
struct Baz; struct Bar { int m; }; struct Foo { int m; }; struct Baz { Baz(const Bar&); Baz(const Foo&); };
Рекомендуемое решение - специализировать
common_type
, который является утомительным. Есть ли лучшее решение?
Для справки см. §20.9.7.6 Таблица 57 в N3242.