我在这里问了一个问题,即获取函数的地址是否会强制编译所述函数,特别是关于 Substitution-Failure-Is-Not-An-Error。可以在这里找到最直接的答案:
非正式地,如果对象的地址被获取,或者引用绑定到它,则该对象是 odr-used,如果对其进行函数调用或获取其地址,则函数是 odr-used。如果一个对象或一个函数被odr-used,它的定义必须存在于程序的某个地方;违反这一点是链接时错误。
但是我测试过的所有编译器都表明这是完全可行的:
void foo(int);
auto bar = &foo;
这不合法吧?但如果不是,为什么要建造?