我开始关注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&); };
Run Code Online (Sandbox Code Playgroud)
建议的解决方案是专业化common_type,这是繁琐的.有更好的解决方案吗?
有关参考,请参见N3242中的§20.9.7.6表57.
在我的理解中,存在的唯一理由std::make_pair,并std::make_tuple是,你不必自己写的类型,它们会自动推导.在C++ 1z中,我们对类模板进行了模板参数推导,这使我们可以简单地编写
std::pair p(1, 2.5); // C++1z
Run Code Online (Sandbox Code Playgroud)
代替
auto p = std::make_pair(1, 2.5); // C++11/14
Run Code Online (Sandbox Code Playgroud)
情况std::tuple类似.这导致以下问题:在C++ 1Z,有一种情况,其有利于使用std::make_pair和std::make_tuple替代使用的构造std::pair和std::tuple?
请考虑纯C++ 1z代码(即不需要向后兼容C++ 14)并假设每个人都熟悉这个C++ 1z特性.