tl; dr:std::common_type_t<int&, int&>
是int
。我们可以做些什么来代替int&
?
this问题解释了腐朽行为的原因。这种实现的问题是剥离完全合法的引用(即用户传入的引用)。
实际上,我们可以编写另一个元函数来查看源类型,找出它们的常量和&#34;参考性&#34;并适当修改std::common_type
的结果,但这似乎只是丑陋。我们可以做得更好吗?
对于好奇的人,我的动机是:我正在编写(又一个)访问包装器,使用一组lambdas并生成一些适用于boost::variant
(或std::variant
的内容) 。我希望它满足两个要求,其中包括:
允许不同的lambda返回不同但兼容的类型(例如Foo*
的{{1}}和Bar*
。
允许从lambdas返回非const左值引用。
为了满足前者,我需要弄清楚返回值的常见类型。为了满足后者,如果所有原始返回类型都是引用,我需要公共类型作为引用。