c++ - 为什么我的表达式不是模板内的常量表达式?
问题描述
我有一个constexpr
功能:
template<class T, class U>
constexpr bool equal(T&& t, U&& u){
return std::addressof(t) == std::addressof(u);
}
现在,如果我在 main 中调用它。它按预期工作并且equal
行为就像 constexpr 一样产生常量表达式。
struct bar_t{
unsigned _tmp;
};
int main(){
bar_t a{25}, b{32};
static_assert(equal(a, a)); // Ok Passes;
static_assert(equal(a, b)); // Ok Fails;
}
现在,当在模板函数中进行静态断言时。像这样:
template <class X>
auto Foo(X&& a, X&& b){
static_assert(equal(a,b)); // Not constant Expression
// This line says that equal is not constexpr
}
现在这是我的问题:
为什么在一个地方是这种情况,而在另一个地方不是 constexpr?
我如何使它成为无处不在的恒定表达?
解决方案
推荐阅读
- react-native - 应用关闭时检测来电
- c# - c# 在 foreach 字符串循环中更改字符串
- python - Django timedelta (DurationField) 到秒
- javascript - 我的音频确实从服务器获取,但是当我单击我的音频按钮时显示“未定义的音频”
- android - 有没有其他不使用`getContentResolver()`的方式访问联系人?
- client - 是否可以在创建 Javascript Paho MQTT 客户端后更改其 IP 地址?
- angular - 输入框更改时如何隐藏数据绑定中的消息
- json - Artifactory Create Repository Rest API 不起作用
- mips - 向 MIPS 添加新命令
- javascript - 如何在 JS 中的页面重新加载时始终要求相机权限