I mean, other than []<>(){}() being a valid C++ expression [0], C++ hasn't even made any notable sygil-related syntax changes recently. Sure, some keywords were added (auto, constexpr, co_yield...) but I don't see how that leads to "ugly" syntax.
[0]: That's a lambda capturing no state, having no template parameters, taking no arguments, with an empty body, finally being called immediately with no arguments. But half of that is optional. A more usual lambda would look like [foo](int bar) { return foo+bar; }.
On the older side: the initialization list syntax has always been ugly (and bug-prone, due to the unintuitive evaluation order.)
template< typename T >
struct foo<T, std::void_t<decltype(++std::declval<T&>() )>>
: std::true_type { };
looks terrible and that's just basic.https://rust-lang.github.io/rfcs/2515-type_alias_impl_trait....
In fact, a lot of what the Rust syntax ugly was taken from C++, and it took most of what makes C++ ugly. So the entire discussion is just amusing.