使用全局引用调用函数时发生访问冲突

Access violation when calling a function using a global reference

我正在测试多种存储和使用名为 foo 的函数的函数引用的方法。

#include <iostream>

using Function = void (&)(void); // Reference to Function

void foo(void)
{
    std::cout << "Foo called succesfully" << std::endl;
}

首先,我尝试将对 foo 的直接引用存储在 Holder class:

的静态成员中
class Holder {
public:
    static const Function class_foo;
};

Function Holder::class_foo = foo;

其次,我试图在全局变量中存储对 foo 的直接引用:

Function global_foo1 = foo;

第三,我试图在 Holder class:

中存储对其静态引用的引用
const Function& global_foo2 = Holder::class_foo;

第四,我尝试将其静态引用的副本存储在 Holder class:

Function global_foo3 = Holder::class_foo;

尝试使用第 3 种 (global_foo2) 和第 4 种 (global_foo3) 情况执行 foo 时发生访问冲突异常。

int main(void)
{
    const Function& local_foo = Holder::class_foo;

    local_foo(); // Executes Properly

    Holder::class_foo(); // Executes Properly

    global_foo1(); // Executes Properly

    global_foo2(); // Throws Exception -> Access Violation when Executing

    global_foo3(); // Throws Exception -> Access Violation when Executing

    return 0;
}

知道我做错了什么吗?可能是因为我对编译步骤不了解。

Obs:只需按顺序复制每个代码块即可执行完整代码。我的编译器是 Microsoft Visual Studio 15.5.2。还尝试了最新版本 15.5.6。仍然无法在 15.9.4 版中使用。异常证明是here or here.

代码使用 GCC 编译和执行正确。它必须是 MSVC 编译器错误或错误的编译器配置。