在 C++20 中,如果应用别名模板,则可以具有隐式推导指南。
然后,我构建了一个简单的模板别名ints
:
template <std::size_t N>
using ints = std::array<int, N>;
但:
ints{1, 2, 3, 4}
不起作用,GCC 说:
- 错误:没有匹配的调用函数
array(int, int, int, int)
- 注意:无法推导出模板参数
N
- 注意:不匹配的类型
std::array<int, N>
和int
我不明白为什么它无法编译。
和:
template <typename T>
using array_of_4 = std::array<T, 4>;
和
array_of_4{1, 2, 3, 4}
也不会工作。
- 是不是因为
std::array
《推演指南》是用户提供的? - 如果上面的答案不正确,那是什么原因呢?
我发现了一个关于这个问题的类似问题:How to write deduction Guidelines for aliases of aggregate templates?.
由此得出结论,按照标准,该代码应该是格式良好的。因此,GCC 可能有不同的实现来阻止此代码编译。