- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
GCC 已实现 P0634R3当类型在已知上下文中时,放弃指定 typename
的需要。
它是否也适用于concept
?
因为以下代码无法编译:
template<typename T>
concept sample_concept =
std::default_initializable<T::value_type> &&
requires (T t) {
{ t.some_func(std::declval<T::some_type>()) }
-> std::same_as<T::iterator>;
};
但是当我在 T::value_type
和 T::iterator
前面指定 typename
时,它会编译。
最佳答案
从论文中,强调我的:
We therefore propose we make
typename
optional in a number of commonplace contexts that are known to only permit type names.
那篇论文使 typename
仅在您需要具有类型的那些地方是可选的。在别名声明的右侧,必须是类型。在 static_cast
中,需要是类型等。
但是在这里:
template<typename T>
concept sample_concept = std::default_initializable<T::value_type>;
事实并非如此。虽然 default_initializable
的参数是类型参数,但您也可以拥有采用非类型模板参数或模板模板参数的概念。所以不是只允许类型名的情况,所以这里 typename
还是强制的。
你可能会问:嗯,特别是在概念中,因为你不能重载一个概念或(当前)有依赖的概念,你可以看看这个概念,看看它是否需要一个类型.但这是为了获得少量 yield 而大大增加了复杂性,如果我们将来添加依赖概念,这将变得更加复杂和更小。
关于c++ - 可选类型名是否适用于概念?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63689097/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!