gcc 11.1.0 范围 header 中缺少 `typename`

missing `typename` in gcc 11.1.0 ranges header

我正在使用 clang-12.0.1gcc-11.1.0 中的 libstdc++。当包含 <ranges> 时,出现以下错误:

[build] /usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/11.1.0/../../../../include/c++/11.1.0/ranges:3392:19: error: missing 'typename' prior to dependent type name 'iterator_traits<iterator_t<_Base>>::iterator_category'
[build]             using _Cat = iterator_traits<iterator_t<_Base>>::iterator_category;
[build]                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

这是库错误吗?

Clang 尚未实现 P0634R3 yet, as per the current posted status

所以回答你的问题:

Is this a library bug?

不!由于范围库仅在 C++20 中可用,因此 GCC 的实现可以自由使用仅根据该标准版本可用的语法。