是否可以在C ++ 20中为概念完成remove关键字模板?

时间:2019-10-08 15:07:22

标签: c++ visual-studio-2019 c++20 c++-concepts

例如,将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,这应该是可能的。

2 个答案:

答案 0 :(得分:4)

Concepts TS提供了所谓的“简洁语法”,它允许您通过使用概念而不是参数列表中的类型名来隐式地将函数声明为模板。试图将Concepts TS纳入标准时,ISO C ++委员会认为这是有争议的。他们想要一种方法,通过查看函数声明是否是模板来了解它。

来回往复后,它们came up with an alternate terse syntax:您使用COUNT(*)推导(取自通用lambda),受概念名称约束:

||

但是,目前大多数概念实现都实现了Concepts TS功能,但尚未实现较新的东西。 VS从未有过Concepts TS实现,他们明确表示尚未实现这种简洁的模板语法。

答案 1 :(得分:-2)

不。仅在基本情况下。 在某些情况下,例如,您可能需要一个确切的类型。 例如,要编写转接呼叫,

template <class ... TT>
void SomeFunc(TT && ... tt)
 {
  AnotherFunc( std::forward<TT>(tt)... );
 }