Concepts可用于将类型约束作为模板参数,如下例所示:
template<typename t, int v>
concept the_concept1 = sizeof(t) > v;
template<int v, the_concept1<v> t>
struct some_struct1{};
字符串
我尝试使用类似的方法,其值如下例所示:
template<int v1, int v2>
concept the_concept2 = v1 > v2;
template<int v1, the_concept2<v1> v2>
struct some_struct2{};
型
但是在G++ 10中,我得到了以下错误消息:
error: ‘the_concept2’ does not constrain a type
型
所以我想知道概念是否可以用来约束价值观?如果可以的话,我应该怎么做?
编辑:我的最终目标是在 declaration 中使用带有可变模板参数的模板结构的概念,如:
template<typename t, std::size_t ... v>
struct the_struct;
型
我需要一个概念来检查 everyv
是否小于sizeof(t)
。
1条答案
按热度按时间sgtfey8w1#
如果你想使用一个概念作为模板参数的命名 type 约束,就像你的例子一样,这个概念需要应用到一个 type 模板参数。
你仍然可以定义仅适用于非类型模板参数的概念,但是,只要你在允许这些的上下文中使用它;例如使用requires-clause:
字符串
另一个应用于函数模板或类模板的成员函数的示例:
型
下面的OP编辑(基本上问了一个完全不同的问题)
编辑:我的最终目标是在声明一个带有可变模板参数的模板结构时使用这个概念,比如:
型
我需要一个概念来检查是否每个
v
都小于sizeof(t)
。可以通过指定概念本身来实现,以应用于在
sizeof(T) > v
检查中使用参数包扩展进行扩展的可变参数非类型模板参数:型