用户定义的 std 类型推导指南

αλε*_*λυτ 4 c++ language-lawyer clang++ ctad

出于某种原因,在clang 中仍然缺乏预期的CTADstd::initializer_list

std::initializer_list l{1,2,3}; // error in clang
Run Code Online (Sandbox Code Playgroud)

添加如下所示的用户定义指南可以解决此问题

namespace std {
    template<class T> 
    initializer_list(const initializer_list<T>&) -> initializer_list<T>; 
} 
Run Code Online (Sandbox Code Playgroud)

但是是否允许为std::类型添加用户定义的 CTAD 指南?

Oli*_*liv 5

向标准库类型添加推导指南是 UB [namespace std]§4.4

如果 C++ 程序声明以下内容,则它的行为是未定义的:[...]

  • 任何标准库类模板的推导指南。