c++概念和模板参数

问题描述 投票:0回答:1

下面的代码就可以了

std::bitset<24> foo;
static_assert( std::same_as<std::bitset<24>,std::bitset<foo.size( )>> )

注意 foo.size( ) 的使用,它是一个 constexpr 函数。那么为什么以下不起作用

template <typename T> concept is_std_bitset = requires( T t )
{
    requires std::same_as<T,std::bitset<t.size( )>>;
};

static_assert(  is_std_bitset<std::bitset<24>> ) // This fails

看起来 t.size( ) 在这个概念中是无效的。这是概念定义的一般限制吗?如果是,有什么好的方法可以解决吗?

c++ c++-concepts
1个回答
0
投票

t
不存在;它从来不存在。它是一个假设的对象,概念系统用它来决定代码是否有效。表达式
t.size()
只会检查此类代码是否有效,以及该表达式的结果类型是否可以在使用它的地方使用。概念系统不会显现
T
类型的对象并实际调用该函数。

现在,如果

size
static
会员,您可以致电
T::size()
来获取
bitset
尺寸。但除此之外,不行。

© www.soinside.com 2019 - 2024. All rights reserved.