Inspired by https://reviews.llvm.org/D58922
Since this code compiles I assume we should add those tokens to switch:
template<int> struct foo {}; int main() { { auto lambda = []() -> foo<5+2> { return {}; }; } { auto lambda = []() -> foo<5-2> { return {}; }; } { auto lambda = []() -> foo<5/3> { return {}; }; } { auto lambda = []() -> foo<5%2> { return {}; }; } { auto lambda = []() -> foo<5<<2> { return {}; }; } { auto lambda = []() -> foo<!false> { return {}; }; } { auto lambda = []() -> foo<~5> { return {}; }; } { auto lambda = []() -> foo<5|2> { return {}; }; } { auto lambda = []() -> foo<5||2> { return {}; }; } { auto lambda = []() -> foo<5&2> { return {}; }; } { auto lambda = []() -> foo<5&&2> { return {}; }; } { auto lambda = []() -> foo<5==2> { return {}; }; } { auto lambda = []() -> foo<5!=2> { return {}; }; } { auto lambda = []() -> foo<5>=2> { return {}; }; } { auto lambda = []() -> foo<5<2> { return {}; }; } { auto lambda = []() -> foo<5<=2> { return {}; }; } { auto lambda = []() -> foo<2 ? 1 : 0> { return {}; }; } }