问题标签 [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 回答
552 浏览

c++ - 嵌套类中的模板别名可见性

考虑以下:

这编译得很好。好的。但是现在添加另一个参数Z

好的,也许在派生嵌套类时Z,类中模板别名的定义是可见的,但在其主体内不可见,这会触发错误,因为全局定义有两个参数。ABZ

但是为什么在第一种情况下行为不同,什么时候Z只是类型别名A

最后,制作A一个模板:

现在错误消失了。为什么?

(在 Clang 3.6 和 GCC 4.9.2 上测试)

0 投票
1 回答
1603 浏览

c++ - 为什么我不能在函数内声明模板化类型别名?

为什么我不能在函数内声明模板化类型别名?

错误:模板声明不能出现在块范围内

为什么我们被迫将这些声明放在块范围之外?

0 投票
1 回答
119 浏览

c++ - 如何从模板别名切换到 typedef?

我有一个基本上实现注册表设计模式的模板类。值通过 Keys 注册并存储在某个容器中:

然后,我可以将它与这样的序列容器一起使用:

我什至可以将它与别名一起使用:

但我不知道如何将它与 typedef 一起使用,如下所示:

我基本上想要这样的东西:

非常感谢你的帮助。

0 投票
1 回答
371 浏览

c++ - 别名模板、部分特化和无效参数类型 void

考虑以下代码:

它工作正常,正如预期的那样,涉及的行S和涉及的行都Alias在引擎盖下定义了相同的类型S<void(int)>

现在,考虑以下更改:

我希望它能够编译,原因与上述类似。
不用说,由于涉及 的行,它没有编译Alias,而是我得到了错误:

代替“使用别名 = S [with Args = {void}] 的模板”

[...]

错误:无效的参数类型'void'

问题很简单:我在这里错过了什么?

0 投票
0 回答
58 浏览

c++ - 使用 void 时依赖类型包扣除失败......何时以及为什么?

这个问题是另一个问题的后续问题。
考虑以下代码:

如果我们注释掉(2),则示例符合,否则编译失败。
从链接的问题中,我们发现(2)失败,因为:

由非依赖类型 void 的单个未命名参数组成的参数列表等效于空参数列表。除此特殊情况外,参数不应具有 typecv void。

而且:

[注意:类型推导可能因以下原因而失败: — [...] — 尝试创建参数类型为 void 或返回类型为函数类型或数组类型的函数类型。— [...] — 尾注]

我不清楚为什么(1)编译。

换句话说,如果(2)失败,因为Args它是依赖类型并且受到上述限制:

同样的问题应该影响Args

为什么在这种情况下使用voidas很好S<void(void)>
请注意,急于std::function接受这种签名的人。

0 投票
1 回答
299 浏览

c++ - Template alias, Template specialization and Template Template parameters

I want to determine the underlying template of a template parameter by using a combination of a template alias and template specializations. The follwing code compiles fine on gcc 4.8, 6.2.1 but not on clang 3.5, 3.8.

Which behavior is standard conformant?

0 投票
0 回答
104 浏览

c++ - 模板化别名是否执行内部和外部参数包非推断上下文?

问题来自这里- 我想创建一种解决更普遍问题的方法。考虑一个例子:

clang 编译代码没有问题,另一方面 gcc 显示以下错误:

[现场演示]

让我感到困惑的是 gcc 在使用相同的别名但不涉及外部参数包时没有扣除问题,例如:

所以问题是 - 将外部类和内部类的参数包与这种形式的别名结合起来以使编译器推断出模板参数之一是否合法,还是 gcc 错误?

编辑(基于博格丹的评论)

该代码也会给 MSVC (2017 RC) 带来麻烦,但以这种形式与 EDG 编译器一起工作,icc(版本 16 和 17)似乎也能很好地处理代码。还值得注意的是,使用类而不是别名的类似代码(在某些地方也被视为推断的上下文,例如 bogdan)会给编译器带来更多麻烦——只有 clang 似乎可以很好地处理这个版本(?)

0 投票
2 回答
136 浏览

c++11 - 使用 forward_as_tuple 在遗留函数签名上传递参数包

在我的应用程序中,我想通过旧函数签名传递参数包,并更改值。这是用我的尝试作为评论来说明我的问题的代码:

有没有办法使参数包成为可声明的左值?

0 投票
1 回答
2624 浏览

c++ - 为什么别名模板给出冲突的声明?

将一些 C++11 代码从 Clang 移植到 g++

为 Clang(版本 3.1 到 SVN 主干)与任何 g++ 版本提供不同的行为。对于后者,我得到这样的错误

value_t<S<T>>如果我使用完整的而不是模板别名,typename S<T>::value_type那么g++ 也可以

问题:模板别名不应该与其底层表达式完全互换吗?这是一个 g++ 错误吗?

更新:Visual C++ 也接受类外定义中的别名模板。

0 投票
1 回答
255 浏览

c++ - gcc 和 clang 是否不能正确推断模板别名类型?

我有以下简单的例子:

在此示例中,我们使用模板别名来获得正确数量的模板参数来调用函数 C()。当然,这是从导致此问题的实际情况中提取的,因此解决方法不是这里的解决方案(也不是我正在寻找的)。

gcc 给出:

根据标准,这是来自 gcc 的正确输出吗?对我来说,在这种情况下,该语言似乎应该允许对模板别名进行适当的类型推断。