std::is_union 实现如何工作?

问题描述

我目前正在更详细地了解 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 和可能所有主要实现都不能移植到任何不能自动使其工作的编译器?

解决方法

并非所有标准库都可以用 C++ 实现。

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

基本上没有内在函数就无法实现 is_union

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

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