簡體   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