std 命名空間內的專業化限制
std 命名空間允許對其模板進行明確專業化,但存在特定限制。
禁止特化的模板:
根據C 標準,以下模板不能在std 命名空間內特化:
-
numeric_limits for non -算術類型(例如,complex): 僅算術類型可以特化。
-
shared_ptr 和weak_ptr: 必須滿足可複製性、可分配性和比較的特定要求。
-
hash: 特化必須符合標準雜湊類別範本的要求。
-
類型特徵 (): 特化行為除非明確允許,否則未定義(例如,僅允許某些 common_type 專業化)。
-
語言環境: 具有所需的專業化。
-
istreambuf_iterator: 需要簡單的複製建構子、預設建構子和析構函式。
-
非浮點類型的複雜性:為其他類型定義專業化被認為是毫無意義的。
-
原子: 必須刪除複製操作和 constexpr 值建構子。
-
unary_function 和 binary_function: 專門化已棄用並禁止。
常規限制:
- 任何專業化不得與原始範本要求衝突。
- 除非明確指定,否則禁止標準函式庫範本的明確專業化和實例化。
- 標準函式庫類別的成員函式、函式範本或成員類別範本的明確特化是未定義的行為。
以上是std 命名空間中的專用範本有哪些限制?的詳細內容。更多資訊請關注PHP中文網其他相關文章!