是否允许获取未定义函数的地址?

Is taking the address of an undefined function allowed?

下面的代码定义了整个程序。这个程序是否符合标准(最新版本)?

void foo();

int main()
{
    auto x = &foo;
    return 0;
}

Here 是一个方便的快捷方式。

这段代码没有实际用处,我只是好奇。

Every function that is odr-used requires a definition(无需诊断)。取一个函数的地址是一个 odr-use,所以这个程序表现出未定义的行为。通过优化,地址被优化,因此它没有链接器错误,但它不需要工作。