// { dg-do run { target c++26 } } #include #include #include template class Indirect> constexpr void test_access() { const std::vector src{1, 2, 3, 4, 5}; Indirect> i(src); auto const& ci = i; VERIFY( *i == src ); VERIFY( *ci == src ); VERIFY( *std::move(ci) == src ); std::vector&& vr = *std::move(i); VERIFY( vr == src ); VERIFY( *i == src ); std::vector vc = *std::move(i); VERIFY( vc == src ); VERIFY( vr.empty() ); VERIFY( i->empty() ); VERIFY( ci->empty() ); } template struct PublicBase : std::indirect { using std::indirect::indirect; }; template class PrivateBase : std::indirect { public: using std::indirect::indirect; using std::indirect::operator*; using std::indirect::operator->; }; constexpr bool test_all() { test_access(); test_access(); test_access(); return true; } int main() { test_all(); static_assert(test_all()); }