GCC中std::ranges::views::enumerate是否使用了错误的索引类型?
Range-v3与C++20 ranges中enumerate视图的索引类型差异
使用Range-v3时,执行以下代码:
std::vector<int> v; auto w = v | ranges::views::enumerate; auto [x, y] = *w.begin(); static_assert(std::is_same_v<std::size_t, decltype(x)>);该静态断言成立,因为std::size_t是对象索引的合适类型。
切换到C++20标准库的ranges时,上述静态断言会失败,取而代之的是
static_assert(std::is_same_v<long, decltype(x)>)断言成立。在测试环境(GCC 13.2.1)中,std::size_t的实际类型是unsigned long,与long并不相同。
内容的提问来源于stack exchange,提问作者Enlico
相关产品推荐
相关产品推荐

