如何使类型 T 的 `std::is_empty_v<T> && sizeof(T) > 1` 为 true?

xml*_*lmx 3 c++ types type-traits template-meta-programming c++11

我在这里遇到了一个有趣的测验问题:

编写一个包含类类型 T 的翻译单元,这样为 std::is_empty_v<T>真,但sizeof(T)大于 1。

我思考了一段时间,但没有解决办法。

如何创建一个真实T的类型std::is_empty_v<T> && sizeof(T) > 1

Art*_*yer 6

std::is_empty检查是否没有成员。您可以使用对齐来强制大小大于 1:

struct alignas(2) T {};

static_assert(std::is_empty_v<T>);
static_assert(sizeof(T) > 1);
Run Code Online (Sandbox Code Playgroud)