根据cppreference,在C++ 17中不推荐使用std::is_literal_type
这个特征。问题是为什么和什么是未来检查某种类型是否为literal type的首选替换。C++中已过时的std :: is_literal_type 17
9
A
回答
13
的
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
特质。这还不存在。
然而,(已经实现)特质并没有不良影响,并允许编译时内省为其核心语言类型类别指定模板参数可能满足。在核心工作组撤销字面类型的概念之前,应该保留相应的库特征。
接下来的步骤(弃用之后)将写一篇论文,建议从核心语言中删除该术语,同时不赞成/删除类型特征。
因此,这个计划是最终摆脱“字面类型”的整体定义,用更细致的东西取而代之。
相关问题
- 1. 的std ::在C++ 17
- 2. C++ 17 std :: G ++中可选?
- 3. 如何在C++ 17中使用std :: min_element?
- 4. 的std ::插入替换C++ 17
- 5. C + + 17中的std :: byte与C#中的byte相当吗?
- 6. C++ 17标准将包含“std :: byte”吗?
- 7. 从boost到std :: experimental以及C++ 17
- 8. 为什么在C++ 17中的std :: variant允许std :: variant <int,const int>
- 9. C++ 17中不赞成使用std :: result_of的原因是什么?
- 10. C++ 17中的std :: vector演绎指南是什么?
- 11. std :: allocator是否处理C++ 17中的over-aligned类型?
- 12. 为什么在C++ 17中没有std :: future :: then?
- 13. 的std ::在地图::插入件变化C++ 17
- 14. a + 17 + b^17 = c^17在Python中有最小相对误差
- 15. 如何让CMake通过基于GCC版本的std = C++ 14/C++ 1y或C++ 17/C++ 1z?
- 16. C++ 17表达式评估顺序和std :: move
- 17. C++ 17:lambda转std ::函数转换失败
- 18. Chrome 17中是否已弃用window.document.height?
- 19. C++通过函数std :: array std :: array
- 20. Gcc 7.2 C++ 17 constexpr
- 21. C++编译器17
- 22. 为什么std :: allocator在C++ 17中失去成员类型/函数?
- 23. RESTKit中的RKResponseDescriptor已过时
- 24. C++ 17中的纯虚函数体?
- 25. 在C++ 17中转换noexcept的函数?
- 26. 为什么C++ 17的std :: any不允许通过any_cast返回可移动的值?
- 27. Boost.Pointer容器在C++ 11/14中由std :: unique_ptr过时了吗?
- 28. 的std :: for_each的过度的std ::集,C++ 11
- 29. C++中std :: unique_ptr和std :: shared_ptr的区别
- 30. C#型号已经时过境迁
有趣的是,我认为'std :: is_literal_type'提供了一个安全检查是否可以在constexpr表达式中使用类型。不过,这是一个很好的答案。 – plasmacel