问题标签 [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.
c++ - 模板模板参数和模板别名:编译器错误?
我对以下代表性示例代码有疑问:
这段代码用 icc-19.0.0 编译得很好(并且似乎用 msvc-19.24 编译),但不能用 gcc-10.1、clang-10.0.0 和 icc-18.0.0 编译。
使用 gcc-10.1,错误消息是:
上下文:我有一个模板类Z
,它有一个模板模板参数。我想从中派生一个类,对于最终用户,它接受与(或)W
相同的模板模板参数,但将它们分派给内部类,并通过派生它们来修改它们的行为。Z
X
Y
XX
YY
X
Y
这个问题是编译器错误吗?如果是,是否有某种解决方法?
非常感谢!
c++ - 如何编写聚合模板别名的推演指南?
使用 C++20,可以为别名模板生成扣除指南(请参阅https://en.cppreference.com/w/cpp/language/class_template_argument_deduction上的“别名模板的扣除”部分)。然而,我无法让它们使用聚合初始化语法。在这种情况下,似乎没有生成别名的扣除准则。
看这个例子:
我曾尝试编写演绎指南,但每次都会遇到编译器错误。
以及我能想到的任何其他指导方针。
甚至可以自动推导出数组别名的大小吗?
我正在使用 GCC 10.2
c++ - 比较模板本身和未实例化的模板类型
我的目标是能够比较模板,即写这样的东西
我的第二次尝试是使用别名模板和自定义same
函数。就像是:
但这也不起作用。问题是same<std::set, template_type<std::set<int>>::type>::value
返回false,即模板类和它的模板别名由于某种原因不同。
我的第三次尝试是写类似的东西,template_type_identity
但我不知道应该用什么作为身份:
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 可能有不同的实现来阻止此代码编译。