diff --git a/libcxx/test/std/iterators/iterator.requirements/indirectcallable/projected/projected.compile.pass.cpp b/libcxx/test/std/iterators/iterator.requirements/indirectcallable/projected/projected.compile.pass.cpp --- a/libcxx/test/std/iterators/iterator.requirements/indirectcallable/projected/projected.compile.pass.cpp +++ b/libcxx/test/std/iterators/iterator.requirements/indirectcallable/projected/projected.compile.pass.cpp @@ -23,6 +23,27 @@ static_assert(std::same_as()), int const&>); static_assert(std::same_as, std::ptrdiff_t>); +void test() { + { + auto projection = [](int x) { return x + 1; }; + using P = std::projected; + static_assert(std::same_as, int>); + static_assert(std::same_as, int>); + static_assert(std::same_as, std::ptrdiff_t>); + static_assert(std::same_as, int>); + static_assert(std::same_as, int>); + } + { + auto projection = [](int& x) -> int& { return x; }; + using P = std::projected; + static_assert(std::same_as, int>); + static_assert(std::same_as, int&>); + static_assert(std::same_as, std::ptrdiff_t>); + static_assert(std::same_as, int&&>); + static_assert(std::same_as, int&>); + } +} + struct S { }; using Cpp17InputIterator = std::projected, int S::*>;