Des*_*old 5 c++ language-lawyer template-aliases c++20 ctad
在 C++20 中,如果应用别名模板,则可以具有隐式推导指南。
然后,我构建了一个简单的模板别名ints:
template <std::size_t N>
using ints = std::array<int, N>;
Run Code Online (Sandbox Code Playgroud)
但:
ints{1, 2, 3, 4}
Run Code Online (Sandbox Code Playgroud)
不起作用,GCC 说:
array(int, int, int, int)Nstd::array<int, N>和int我不明白为什么它无法编译。
和:
template <typename T>
using array_of_4 = std::array<T, 4>;
Run Code Online (Sandbox Code Playgroud)
和
array_of_4{1, 2, 3, 4}
Run Code Online (Sandbox Code Playgroud)
也行不通。
std::array它的推演指南是用户提供的?我发现了一个关于这个问题的类似问题:How to write deductionguides for aliases ofaggregate templates? 。
结论是,按照标准,该代码应该是格式良好的。因此,GCC 可能有不同的实现来阻止此代码的编译。
Run Code Online (Sandbox Code Playgroud)ints{1, 2, 3, 4}我不明白为什么它无法编译。
您没有指定模板参数。这有效:
ints<4>{1, 2, 3, 4}
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)array_of_4{1, 2, 3, 4}也行不通。
同样的问题。这有效:
array_of_4<int>{1, 2, 3, 4}
Run Code Online (Sandbox Code Playgroud)
std::array的推导指南是用户提供的?
是的。
| 归档时间: |
|
| 查看次数: |
242 次 |
| 最近记录: |