【发布时间】:2023-03-31 15:58:01
【问题描述】:
由于某种原因,clang 中的 std::initializer_list 仍然缺少预期的 CTAD:
std::initializer_list l{1,2,3}; // error in clang
添加如下用户自定义指南可以fix the issue:
namespace std {
template<class T>
initializer_list(const initializer_list<T>&) -> initializer_list<T>;
}
但是是否允许为std:: 类型的 CTAD 添加用户定义的指南?
【问题讨论】:
-
上次检查时,我的印象是 Clang 在这里是正确的,
std::initializer_list l{1,2,3};不应该编译。你确定标准允许吗? -
@HolyBlackCat 这就是我的问题。
-
您的问题提出了不同的问题,是否允许添加...
-
@Dani 是的。现在我看到了区别。感谢您指出这一点。
-
@HolyBlackCat 尽管符合标准(如果有的话),但像 'std::initializer_list l{1,2,3};' 这样的代码我认为它应该对常规 c++ 开发人员有效。因此,如果缺乏标准,那么标准应该是固定的。
标签: c++ language-lawyer clang++ ctad