问题标签 [template-aliases]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
58 浏览

c++ - 模板模板参数和模板别名:编译器错误?

我对以下代表性示例代码有疑问:

这段代码用 icc-19.0.0 编译得很好(并且似乎用 msvc-19.24 编译),但不能用 gcc-10.1、clang-10.0.0 和 icc-18.0.0 编译。

使用 gcc-10.1,错误消息是:

上下文:我有一个模板类Z,它有一个模板模板参数。我想从中派生一个类,对于最终用户,它接受与(或)W相同的模板模板参数,但将它们分派给内部类,并通过派生它们来修改它们的行为。ZXYXXYYXY

这个问题是编译器错误吗?如果是,是否有某种解决方法?

非常感谢!

0 投票
1 回答
256 浏览

c++ - 如何编写聚合模板别名的推演指南?

使用 C++20,可以为别名模板生成扣除指南(请参阅https://en.cppreference.com/w/cpp/language/class_template_argument_deduction上的“别名模板的扣除”部分)。然而,我无法让它们使用聚合初始化语法。在这种情况下,似乎没有生成别名的扣除准则。

看这个例子:

我曾尝试编写演绎指南,但每次都会遇到编译器错误。

以及我能想到的任何其他指导方针。

甚至可以自动推导出数组别名的大小吗?

我正在使用 GCC 10.2

0 投票
1 回答
30 浏览

c++ - 比较模板本身和未实例化的模板类型

我的目标是能够比较模板,即写这样的东西

我的第二次尝试是使用别名模板和自定义same函数。就像是:

但这也不起作用。问题是same<std::set, template_type<std::set<int>>::type>::value返回false,即模板类和它的模板别名由于某种原因不同。

我的第三次尝试是写类似的东西,template_type_identity但我不知道应该用什么作为身份:

0 投票
1 回答
112 浏览

c++ - 为什么 GCC 编译器不能以别名模板形式从 std::array 推导出模板参数之一

在 C++20 中,如果应用别名模板,则可以具有隐式推导指南。

然后,我构建了一个简单的模板别名ints

但:

不起作用,GCC 说:

  • 错误:没有匹配的调用函数array(int, int, int, int)
  • 注意:无法推导出模板参数N
  • 注意:不匹配的类型std::array<int, N>int

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

和:

也不会工作。

  • 是不是因为std::array《推演指南》是用户提供的?
  • 如果上面的答案不正确,那是什么原因呢?

我发现了一个关于这个问题的类似问题:How to write deduction Guidelines for aliases of aggregate templates?.

由此得出结论,按照标准,该代码应该是格式良好的。因此,GCC 可能有不同的实现来阻止此代码编译。