คู่มือการหักเงินที่กำหนดโดยผู้ใช้สำหรับประเภทมาตรฐาน

Aug 15 2020

ด้วยเหตุผลบางประการยังขาดCTAD ที่คาดไว้สำหรับstd::initializer_listในเสียงดัง :

std::initializer_list l{1,2,3}; // error in clang

การเพิ่มคำแนะนำที่ผู้ใช้กำหนดเองดังต่อไปนี้สามารถแก้ไขปัญหาได้ :

namespace std {
    template<class T> 
    initializer_list(const initializer_list<T>&) -> initializer_list<T>; 
} 

แต่อนุญาตให้เพิ่มคู่มือที่ผู้ใช้กำหนดเองสำหรับ CTAD สำหรับstd::ประเภทได้หรือไม่?

คำตอบ

5 Oliv Aug 15 2020 at 17:17

การเพิ่มคู่มือการหักในประเภทไลบรารีมาตรฐานคือ UB [namespace std] §4.4 :

ลักษณะการทำงานของโปรแกรม C ++ ไม่ได้กำหนดไว้หากประกาศ: [... ]

  • คู่มือการหักสำหรับเทมเพลตคลาสไลบรารีมาตรฐานใด ๆ