C++11当constexpr用作函数参数时,是否可以强制对其求值?

C++11当constexpr用作函数参数时,是否可以强制对其求值?,c++11,constexpr,C++11,Constexpr,假设我有这样的代码: constexpr int foo(int a) { return a * 2; } constexpr int bar(const char* str) { return strlen(str); } int test(int value) { // Do something } int main(int argc, char* argv[]) { // Case 1, evaluated at compile time const

假设我有这样的代码:

constexpr int foo(int a)
{
    return a * 2;
}
constexpr int bar(const char* str)
{
    return strlen(str);
}
int test(int value)
{
    // Do something
}
int main(int argc, char* argv[])
{
    // Case 1, evaluated at compile time
    const int value = foo(1);
    test(value);
    // Case 2, evaluated at run-time
    test(foo(1)); 

    // Case 3
    test(bar("Hello"));
}
在案例1中,foo将在编译时进行评估,而在案例2中,它将在运行时进行评估。即使在案例1中,我也必须保留const关键字

有没有办法强制constexpr在编译时进行求值,即使它不被分配给const


有一些替代方法可以将int包装到模板中,但是案例3呢?该值为char[],没有机会用作模板参数。

您可以使用模板

template<int N> struct force_constexpr_eval {
    static const int value = N;
};
int main() {
    auto val = force_constexpr_eval<foo(1)>::value;
}

谢谢,很抱歉更新了这个问题。如果该值不能用作诸如char[]之类的模板参数,该如何处理?