根據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 :: vector演繹指南是什麼?
- 10. std :: allocator是否處理C++ 17中的over-aligned類型?
- 11. C++ 17中不贊成使用std :: result_of的原因是什麼?
- 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:lambda轉std ::函數轉換失敗
- 17. C++ 17表達式評估順序和std :: move
- 18. Chrome 17中是否已棄用window.document.height?
- 19. C++通過函數std :: array std :: array
- 20. C++編譯器17
- 21. Gcc 7.2 C++ 17 constexpr
- 22. 爲什麼std :: allocator在C++ 17中失去成員類型/函數?
- 23. RESTKit中的RKResponseDescriptor已過時
- 24. 在C++ 17中轉換noexcept的函數?
- 25. C++ 17中的純虛函數體?
- 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