std::is_union 的实现是如何工作的?

How does the std::is_union implementation work?

我目前正在更详细地研究 C++ 标准库,我想知道 std::is_union 的实现是如何工作的。在libcxx(LLVM)中,除了直接使用可能内置的__is_union,它被定义为

template <class _Tp> struct __libcpp_union : public false_type {};
template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_union
    : public __libcpp_union<typename remove_cv<_Tp>::type> {};

类似地,STLPort,虽然很老,但实现起来更加简约:

template <class T>
struct is_union
{ };

这似乎总是解析为 std::false_type,或者更糟的是,解析为空结构,但事实并非如此;这是如何实现的? 在另一个问题中,一个答案表明 is_union can't be implemented without compiler hooks,但这是否意味着 libcxx、STLPort 以及可能所有主要实现都不能移植到任何不会自动使其工作的编译器?

并不是所有的 std 库都可以用 C++ 实现。

您跳过了各种内在函数的测试。

本质上,如果没有内在函数,就无法实现 is_union

std 不是 C++ 附带的库,它是语言的一部分。 #include <vector> 允许某些代码工作;没有 vector header 需要存在,只是 C++ 程序的状态必须在指令后改变。

在实践中(按设计)它是在 C++ 中编写和实现的,作为一个相对传统的库,借助内在函数,并使用保留标记编写以避免预处理器冲突(___Ty 变量名,例如)。