4

在 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 可能有不同的实现来阻止此代码编译。

4

1 回答 1

0
ints{1, 2, 3, 4}

我不明白为什么它无法编译。

您没有指定模板参数。这有效:

ints<4>{1, 2, 3, 4}

array_of_4{1, 2, 3, 4}

也不会工作。

同样的问题。这有效:

array_of_4<int>{1, 2, 3, 4}

std::array 的推演指南是用户提供的?

是的。

于 2021-11-17T12:14:51.823 回答