【发布时间】:2014-01-15 11:04:16
【问题描述】:
我决定尝试使用如下所示的 delctype 的尾随返回类型:
template<typename T, typename U>
auto Add(T t, U u) ->decltype(t,u)
{
return t + u;
}
如果我发送整数或双精度数,则效果很好,例如
Add(10,11); //21
Add(5.35,2.22); //7.57
但后来我问自己这是否适用于布尔算术?
Add(true,true); // = 1 + 1 = 1;
Add(true, false); // = 1 + 0 = 1
Add(false, false); // = 0 + 0 = 0;
在这种情况下它运行良好,但后来我决定尝试以下方法:
->decltype(t + u)
这给了我结果:
Add(true,true); // = 1 + 1 = 2;
Add(true, false); // = 1 + 0 = 1
Add(false, false); // = 0 + 0 = 0;
我假设 decltype(t+u) 将返回类型推断为 int 而不是 bool?为什么是这样? decltype 会选择类型的层次结构吗?
【问题讨论】:
-
因为自动提升为整数的 bool 之和的 decltype 是整数?
-
@Jefffrey 抱歉已修复 :)
-
@dionadar 是的,这就是我的想法,真的只是一个小问题。
-
实际上,
decltype(t,u)是decltype((t,u))是decltype((u))是bool&并且Add的实例化应该失败,因为return尝试将临时绑定到非 const 左值参考。见here (freshly asked) 和there。