174 lines · cpp
1// RUN: %clang_cc1 -std=c++20 -verify -Wno-unused %s2 3template<typename T, typename U>4void operator->*(T, U);5 6template<typename T, typename U>7void operator+(T, U);8 9template<typename T, typename U>10void operator-(T, U);11 12template<typename T, typename U>13void operator*(T, U);14 15template<typename T, typename U>16void operator/(T, U);17 18template<typename T, typename U>19void operator%(T, U);20 21template<typename T, typename U>22void operator^(T, U);23 24template<typename T, typename U>25void operator&(T, U);26 27template<typename T, typename U>28void operator|(T, U);29 30template<typename T, typename U>31void operator+=(T, U);32 33template<typename T, typename U>34void operator-=(T, U);35 36template<typename T, typename U>37void operator*=(T, U);38 39template<typename T, typename U>40void operator/=(T, U);41 42template<typename T, typename U>43void operator%=(T, U);44 45template<typename T, typename U>46void operator^=(T, U);47 48template<typename T, typename U>49void operator&=(T, U);50 51template<typename T, typename U>52void operator|=(T, U);53 54template<typename T, typename U>55void operator==(T, U);56 57template<typename T, typename U>58void operator!=(T, U);59 60template<typename T, typename U>61void operator<(T, U);62 63template<typename T, typename U>64void operator>(T, U);65 66template<typename T, typename U>67void operator<=(T, U);68 69template<typename T, typename U>70void operator>=(T, U);71 72template<typename T, typename U>73void operator<=>(T, U);74 75template<typename T, typename U>76void operator&&(T, U);77 78template<typename T, typename U>79void operator||(T, U);80 81template<typename T, typename U>82void operator<<(T, U);83 84template<typename T, typename U>85void operator>>(T, U);86 87template<typename T, typename U>88void operator<<=(T, U);89 90template<typename T, typename U>91void operator>>=(T, U);92 93template<typename T, typename U>94void operator,(T, U);95 96template<typename T>97void operator*(T);98 99template<typename T>100void operator&(T);101 102template<typename T>103void operator+(T);104 105template<typename T>106void operator-(T);107 108template<typename T>109void operator!(T);110 111template<typename T>112void operator~(T);113 114template<typename T>115void operator++(T);116 117template<typename T>118void operator--(T);119 120template<typename T>121void operator++(T, int);122 123template<typename T>124void operator--(T, int);125 126template<typename T>127void f(int *x) {128 [&](auto *y) {129 *y;130 &y;131 +y;132 -y; // expected-error {{invalid argument type 'auto *' to unary expression}}133 !y;134 ~y; // expected-error {{invalid argument type 'auto *' to unary expression}}135 ++y;136 --y;137 y++;138 y--;139 y->*x;140 y + x;141 y - x;142 y * x;143 y / x;144 y % x;145 y ^ x;146 y & x;147 y | x;148 y += x;149 y -= x;150 y *= x;151 y /= x;152 y %= x;153 y ^= x;154 y &= x;155 y |= x;156 y == x;157 y != x;158 y < x;159 y > x;160 y <= x;161 y >= x;162 y <=> x;163 y && x;164 y || x;165 y << x;166 y >> x;167 y <<= x;168 y >>= x;169 y, x;170 };171}172 173template void f<int>(int*);174