我不知道为什么这个 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.
这是代码:
#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.