// RUN: %clang_cc1 -std=c++20 -verify -Wno-unused %s template void operator->*(T, U); template void operator+(T, U); template void operator-(T, U); template void operator*(T, U); template void operator/(T, U); template void operator%(T, U); template void operator^(T, U); template void operator&(T, U); template void operator|(T, U); template void operator+=(T, U); template void operator-=(T, U); template void operator*=(T, U); template void operator/=(T, U); template void operator%=(T, U); template void operator^=(T, U); template void operator&=(T, U); template void operator|=(T, U); template void operator==(T, U); template void operator!=(T, U); template void operator<(T, U); template void operator>(T, U); template void operator<=(T, U); template void operator>=(T, U); template void operator<=>(T, U); template void operator&&(T, U); template void operator||(T, U); template void operator<<(T, U); template void operator>>(T, U); template void operator<<=(T, U); template void operator>>=(T, U); template void operator,(T, U); template void operator*(T); template void operator&(T); template void operator+(T); template void operator-(T); template void operator!(T); template void operator~(T); template void operator++(T); template void operator--(T); template void operator++(T, int); template void operator--(T, int); template void f(int *x) { [&](auto *y) { *y; &y; +y; -y; // expected-error {{invalid argument type 'auto *' to unary expression}} !y; ~y; // expected-error {{invalid argument type 'auto *' to unary expression}} ++y; --y; y++; y--; y->*x; y + x; y - x; y * x; y / x; y % x; y ^ x; y & x; y | x; y += x; y -= x; y *= x; y /= x; y %= x; y ^= x; y &= x; y |= x; y == x; y != x; y < x; y > x; y <= x; y >= x; y <=> x; y && x; y || x; y << x; y >> x; y <<= x; y >>= x; y, x; }; } template void f(int*);