为什么 C++ 中没有对所有 C++ 标准库类型特征的语言支持?

Why is there no language support in C++ for all C++ standard library type traits?

在 C++ 中,impossible to implement certain C++ standard library type traits 没有编译器内部函数,仅使用 C++ 语言。 Traits 直接处理 C++ 类型。根据 §17.6.1.3.2,C++ 标准库的独立实现必须实现 <type_traits>。这是否实际上意味着 C++ 标准需要来自所有支持独立 C++ 标准库实现的编译器的非标准语言 extensions/compiler 内在函数?

为什么在核心语言不支持的情况下允许此类类型特征进入标准?

如果没有编译器的支持,无法 实现 C++ 标准库的许多方面。例如,type_info。 "freestanding C++ library" 实现不能提供这样的类型,因为它是基于关键字的表达式的结果:typeid。唯一可以提供这种东西的人是编译器编写者,因为编译器是必须生成这些对象的人。

标准库的许多其他元素也是如此。 exception_ptrcurrent_exception(s)initializer_list 等。在 C++ 标准中有完整的

如果没有编译器支持,并非标准库的所有组件都可以实现。类型特征只是独立的 C++ 库无法实现的另一件事。不在 ISO 标准 C++ 中。

至于为什么他们不提供实现它们所需的工具?因为那会花费更多时间。请注意,反射甚至还不是一个完全形成的 TS,而类型特征已经成为标准 5 年了。

很难指定像反射这样的通用工具。确切地知道您需要什么行为以及应该如何提供它。查看常见的使用模式(例如 Boost)并直接使用它们要容易得多。类型特征是反思的唾手可得的果实。