根据参考参数 http://en.cppreference.com/w/cpp, 特质std::is_literal_type http://en.cppreference.com/w/cpp/types/is_literal_type在 C++17 中已弃用。问题是why and 首选替代品是什么以便将来检查类型是否是文字类型 http://en.cppreference.com/w/cpp/concept/LiteralType.
如 P0174 中所述 http://wg21.link/P0174:
The 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>
这并不意味着它是常量表达式默认可构造。
你需要的是一个is_constexpr_constructible
特征。目前尚不存在。
但是,(已实现的)特征不会造成任何损害,并且允许编译时自省给定模板参数可能满足哪些核心语言类型类别。在核心工作组废除文字类型的概念之前,应保留相应的库特征。
删除(弃用后)的下一步是撰写一篇论文,建议从核心语言中删除该术语,同时弃用/删除类型特征。
因此,计划最终是摆脱“文字类型”的整个定义,代之以更细粒度的东西。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)