我不知道为什么这个 static_assert() 代码不起作用

I don't know why this static_assert() code doesn't work

这是代码:

#pragma once

#include <stdint.h>

namespace Detours
{
    static_assert(sizeof(uintptr_t) == sizeof(void *));
}

我收到此错误消息:

Error (active) E2783 expected a comma (the one-argument version of static_assert is not enabled in this mode)

static_assert 声明允许自 C++17 起省略 message 参数。 (cppreference)

您需要在编译器中启用 C++17,或者以这种方式完成 message 参数:

static_assert(sizeof(uintptr_t) == sizeof(void *), "The message you want to show.");

另见

C++17 标准中引入了(至少被 Microsoft 称为)“简洁静态断言”的语言功能,即只有一个参数的 static_assert()。在此之前,第二个参数(字符串文字,错误消息)是必需的。因此,使用(例如)MSVC 和“/std:C++14”标志编译您的代码会出现此错误:

error C2429: language feature 'terse static assert' requires compiler flag '/std:c++17'

clang-cl 给出:

warning : static_assert with no message is a C++17 extension [-Wc++17-extensions]

要解决此问题,请切换您的编译器以符合 C++17 标准,或者,如果您没有这种可能性,请添加所需的第二个参数:

    static_assert(sizeof(uintptr_t) == sizeof(void*), "Wrong uintptr_t size!");

但请注意,即便如此,也不能保证断言一定会成功! uintptr_t 类型只需要足够大以正确容纳指针;它 没有 完全相同的大小。参见:What is uintptr_t data type.