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