Hướng dẫn khấu trừ do người dùng xác định cho các loại std

Aug 15 2020

Đối với một số lý do vẫn còn thiếu dự kiến CTAD cho std::initializer_listtrong kêu vang :

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

Thêm hướng dẫn do người dùng xác định như sau có thể khắc phục sự cố :

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

Nhưng nó có được phép thêm một hướng dẫn do người dùng xác định cho CTAD cho std::các loại không?

Trả lời

5 Oliv Aug 15 2020 at 17:17

Thêm hướng dẫn khấu trừ vào kiểu thư viện tiêu chuẩn là UB [namespace std] §4.4 :

Hành vi của một chương trình C ++ là không xác định nếu nó khai báo: [...]

  • một hướng dẫn khấu trừ cho bất kỳ mẫu lớp thư viện tiêu chuẩn nào.