https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117849
Bug ID: 117849 Summary: constraint variable in requires expression rejected, but P2280R4 made it valid Product: gcc Version: 15.0 Status: UNCONFIRMED Keywords: rejects-valid Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: mkretz at gcc dot gnu.org Target Milestone: --- Testcase (https://godbolt.org/z/Mfd85Wcn9): ------------------- #include <ranges> #include <array> #include <vector> template<typename T> concept StaticSizedRange = std::ranges::sized_range<T> && requires (T&& t) { typename std::integral_constant<std::size_t, std::ranges::size(t)>; }; static_assert(StaticSizedRange<std::array<int, 5>>); static_assert(StaticSizedRange<std::array<int, 5>&>); static_assert(StaticSizedRange<const std::array<int, 5>&>); static_assert(!StaticSizedRange<std::vector<int>>); ------------------- <source>:7:70: error: template argument 2 is invalid 7 | typename std::integral_constant<std::size_t, std::ranges::size(t)>; | ^ However, testing 'std::ranges::size(t) >= 0' is valid for the array assertions. P2280R4 / [expr.const]/10 (https://eel.is/c++draft/expr.const#10) say that this should work.