Not 100% sure whether this is a libstdc++ bug or a clang bug. (Also filed a bug report against libstdc++ at https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93818). Using libstdc++ from gcc 10-20200216 breaks using it with clang 10 in C++20 mode. /usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/10.0.0/../../../../include/c++/10.0.0/ranges:1329:17: error: missing 'typename' prior to dependent type name 'iterator_traits<iterator_t<_Vp> >::iterator_category' using _Cat = iterator_traits<iterator_t<_Vp>>::iterator_category; ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/10.0.0/../../../../include/c++/10.0.0/ranges:1512:47: error: ambiguous deduction for template arguments of '_RangeAdaptor' inline constexpr __adaptor::_RangeAdaptor filter ^ /usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/10.0.0/../../../../include/c++/10.0.0/ranges:1073:2: note: candidate function [with _Callable = std::ranges::views::(lambda at /usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/10.0.0/../../../../include/c++/10.0.0/ranges:1513:9)] _RangeAdaptor(const _Callable& = {}) ^ /usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/10.0.0/../../../../include/c++/10.0.0/ranges:1078:2: note: candidate function [with _Callable = std::ranges::views::(lambda at /usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/10.0.0/../../../../include/c++/10.0.0/ranges:1513:9)] _RangeAdaptor(_Callable __callable) ^ /usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/10.0.0/../../../../include/c++/10.0.0/ranges:1552:19: error: missing 'typename' prior to dependent type name 'iterator_traits<iterator_t<_Base> >::iterator_category' using _Cat = iterator_traits<iterator_t<_Base>>::iterator_category; ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/10.0.0/../../../../include/c++/10.0.0/ranges:1853:47: error: ambiguous deduction for template arguments of '_RangeAdaptor' inline constexpr __adaptor::_RangeAdaptor transform ^ /usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/10.0.0/../../../../include/c++/10.0.0/ranges:1073:2: note: candidate function [with _Callable = std::ranges::views::(lambda at /usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/10.0.0/../../../../include/c++/10.0.0/ranges:1854:9)] _RangeAdaptor(const _Callable& = {}) ^ /usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/10.0.0/../../../../include/c++/10.0.0/ranges:1078:2: note: candidate function [with _Callable = std::ranges::views::(lambda at /usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/10.0.0/../../../../include/c++/10.0.0/ranges:1854:9)] _RangeAdaptor(_Callable __callable) ^ /usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/10.0.0/../../../../include/c++/10.0.0/ranges:2000:47: error: ambiguous deduction for template arguments of '_RangeAdaptor' inline constexpr __adaptor::_RangeAdaptor take ^ /usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/10.0.0/../../../../include/c++/10.0.0/ranges:1073:2: note: candidate function [with _Callable = std::ranges::views::(lambda at /usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/10.0.0/../../../../include/c++/10.0.0/ranges:2001:9)] _RangeAdaptor(const _Callable& = {}) ^ /usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/10.0.0/../../../../include/c++/10.0.0/ranges:1078:2: note: candidate function [with _Callable = std::ranges::views::(lambda at /usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/10.0.0/../../../../include/c++/10.0.0/ranges:2001:9)] _RangeAdaptor(_Callable __callable) ^ /usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/10.0.0/../../../../include/c++/10.0.0/ranges:2092:47: error: ambiguous deduction for template arguments of '_RangeAdaptor' inline constexpr __adaptor::_RangeAdaptor take_while ^ /usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/10.0.0/../../../../include/c++/10.0.0/ranges:1073:2: note: candidate function [with _Callable = std::ranges::views::(lambda at /usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/10.0.0/../../../../include/c++/10.0.0/ranges:2093:9)] _RangeAdaptor(const _Callable& = {}) ^ /usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/10.0.0/../../../../include/c++/10.0.0/ranges:1078:2: note: candidate function [with _Callable = std::ranges::views::(lambda at /usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/10.0.0/../../../../include/c++/10.0.0/ranges:2093:9)] _RangeAdaptor(_Callable __callable) ^ /usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/10.0.0/../../../../include/c++/10.0.0/ranges:2169:47: error: ambiguous deduction for template arguments of '_RangeAdaptor' inline constexpr __adaptor::_RangeAdaptor drop ^ /usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/10.0.0/../../../../include/c++/10.0.0/ranges:1073:2: note: candidate function [with _Callable = std::ranges::views::(lambda at /usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/10.0.0/../../../../include/c++/10.0.0/ranges:2170:9)] _RangeAdaptor(const _Callable& = {}) ^ /usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/10.0.0/../../../../include/c++/10.0.0/ranges:1078:2: note: candidate function [with _Callable = std::ranges::views::(lambda at /usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/10.0.0/../../../../include/c++/10.0.0/ranges:2170:9)] _RangeAdaptor(_Callable __callable) ^ /usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/10.0.0/../../../../include/c++/10.0.0/ranges:2225:47: error: ambiguous deduction for template arguments of '_RangeAdaptor' inline constexpr __adaptor::_RangeAdaptor drop_while ^ /usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/10.0.0/../../../../include/c++/10.0.0/ranges:1073:2: note: candidate function [with _Callable = std::ranges::views::(lambda at /usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/10.0.0/../../../../include/c++/10.0.0/ranges:2226:9)] _RangeAdaptor(const _Callable& = {}) ^ /usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/10.0.0/../../../../include/c++/10.0.0/ranges:1078:2: note: candidate function [with _Callable = std::ranges::views::(lambda at /usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/10.0.0/../../../../include/c++/10.0.0/ranges:2226:9)] _RangeAdaptor(_Callable __callable) ^ /usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/10.0.0/../../../../include/c++/10.0.0/ranges:2297:10: error: missing 'typename' prior to dependent type name 'iterator_traits<iterator_t<_Base> >::iterator_category' = iterator_traits<iterator_t<_Base>>::iterator_category; ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/10.0.0/../../../../include/c++/10.0.0/ranges:2299:10: error: missing 'typename' prior to dependent type name 'iterator_traits<iterator_t<range_reference_t<_Base> > >::iterator_category' = iterator_traits<iterator_t<range_reference_t<_Base>>> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/10.0.0/../../../../include/c++/10.0.0/ranges:2768:19: error: missing 'typename' prior to dependent type name 'iterator_traits<iterator_t<_Base> >::iterator_category' using _Cat = iterator_traits<iterator_t<_Base>>::iterator_category; ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/10.0.0/../../../../include/c++/10.0.0/ranges:2942:47: error: ambiguous deduction for template arguments of '_RangeAdaptor' inline constexpr __adaptor::_RangeAdaptor split ^ /usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/10.0.0/../../../../include/c++/10.0.0/ranges:1073:2: note: candidate function [with _Callable = std::ranges::views::(lambda at /usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/10.0.0/../../../../include/c++/10.0.0/ranges:2943:9)] _RangeAdaptor(const _Callable& = {}) ^ /usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/10.0.0/../../../../include/c++/10.0.0/ranges:1078:2: note: candidate function [with _Callable = std::ranges::views::(lambda at /usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/10.0.0/../../../../include/c++/10.0.0/ranges:2943:9)] _RangeAdaptor(_Callable __callable) ^ 12 errors generated. libstdc++ from gcc 10-20200209 works perfectly with both gcc and clang.
+Richard maybe?
libstdc++ was relying on a C++20 feature we don't implement yet, and there's some disagreement between clang and gcc on a CTAD deduction too (but I don't think we know who is right yet). Both now fixed / worked around in libstdc++.
(In reply to Richard Smith from comment #2) > libstdc++ was relying on a C++20 feature we don't implement yet, and there's > some disagreement between clang and gcc on a CTAD deduction too (but I don't > think we know who is right yet). Both now fixed / worked around in libstdc++. Okay, sounds like this can be closed then. Thanks!