保留std :: common_type中的引用

时间:2017-12-09 21:35:49

标签: c++ c++11 typetraits

tl; dr:std::common_type_t<int&, int&>int。我们可以做些什么来代替int&

this问题解释了腐朽行为的原因。这种实现的问题是剥离完全合法的引用(即用户传入的引用)。

实际上,我们可以编写另一个元函数来查看源类型,找出它们的常量和&#34;参考性&#34;并适当修改std::common_type的结果,但这似乎只是丑陋。我们可以做得更好吗?

对于好奇的人,我的动机是:我正在编写(又一个)访问包装器,使用一组lambdas并生成一些适用于boost::variant(或std::variant的内容) 。我希望它满足两个要求,其中包括:

  1. 允许不同的lambda返回不同但兼容的类型(例如Foo*的{​​{1}}和Bar*

  2. 允许从lambdas返回非const左值引用。

  3. 为了满足前者,我需要弄清楚返回值的常见类型。为了满足后者,如果所有原始返回类型都是引用,我需要公共类型作为引用。

0 个答案:

没有答案