首页 > 解决方案 > 为什么我的表达式不是模板内的常量表达式?

问题描述

我有一个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
}

现在这是我的问题:

标签: c++templatesc++17constexpr

解决方案


推荐阅读