繁体   English   中英

C ++ 17中不推荐使用std :: is_literal_type

[英]Deprecated std::is_literal_type in C++17

根据cppreference ,特性std::is_literal_type在C ++ 17中已弃用。 问题是为什么以及什么是未来的首选替代品来检查类型是否是文字类型

如P0174所述

is_literal类型特征为通用代码提供的值可忽略不计,因为真正需要的是能够知道特定构造将产生持续初始化。 具有至少一个constexpr构造函数的文字类型的核心术语太弱而无法有意义地使用。

基本上,它所说的是没有代码可以用is_literal_type_v来保护,并且这足以确保你的代码实际上是constexpr。 这还不够好:

template<typename T>
std::enable_if_t<std::is_literal_type_v<T>, void> SomeFunc()
{
  constexpr T t{};
}

不保证这是合法的。 即使用is_default_constructible<T>来保护它,也不意味着它是constexpr默认的可构造性。

你需要的是一个is_constexpr_constructible特征。 哪个尚未存在。

但是,(已经实现的)特性没有任何损害,并允许编译时内省检查给定模板参数可能满足的核心语言类型类别。 在核心工作组退出文字类型的概念之前,应保留相应的库特征。

删除(弃用之后)的下一步是撰写一篇文章,建议在弃用/删除类型特征时从核心语言中删除该术语。

所以计划最终要摆脱“文字类型”的整个定义,用更细粒度的东西取而代之。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM