有没有办法在常量表达式中使用函数地址?
void foo()
{}
int main()
{
static_assert(&foo, "test error");
}
这不会编译。
错误 C2057:预期的常量表达式
这背后的意图是我想在编译时比较两个函数地址。
有没有办法在常量表达式中使用函数地址?
void foo()
{}
int main()
{
static_assert(&foo, "test error");
}
这不会编译。
错误 C2057:预期的常量表达式
这背后的意图是我想在编译时比较两个函数地址。
这绝对是一个编译器错误。
函数可以用作模板的模板参数,这意味着它们是 const 表达式。(见ideone)。
此外,上面的代码可以很好地编译gcc 4.6.1
,虽然 ideone 没有编译它,但是 ideone 使用gcc-4.5.1
了与您的代码有关的错误。
这是我的理解,FWIW:
函数类型在编译时已知,但函数地址仅在链接时已知。因此,您可以使用函数类型作为模板参数,但地址在编译时不是常量/已知的。
在您的示例代码中,编译器可以推断出该地址在编译时是非零的,但它无法知道具体的地址。不过,这不是编译器错误。