例如,使用Visual Studio 16.3和
/ std:c ++ latest
这里写的标志here我可以写。
#include <concepts>
template <std::integral T>
T plus1(T a) {
return a + 1;
}
int main() {
auto i = plus1(10);
}
但是我不能写
#include <concepts>
std::integral plus1(std::integral a) {
return a + 1;
}
int main() {
auto i = plus1(10);
}
但是我读到here,这应该是可能的。
Concepts TS提供了所谓的“简洁语法”,它允许您通过使用概念而不是参数列表中的类型名来隐式地将函数声明为模板。试图将Concepts TS纳入标准时,ISO C ++委员会认为这是有争议的。他们想要一种通过查看函数声明来了解它是否是模板的方法。
经过一番往复之后,它们came up with an alternate terse syntax:您使用auto
演绎法(取自通用lambda),受概念名称约束:
std::integral auto plus1(std::integral auto a) {
return a + 1;
}
但是,目前大多数概念实现都实现了Concepts TS功能,但尚未实现较新的东西。 VS从未有过Concepts TS实现,他们明确表示尚未实现这种简洁的模板语法。