I expressed a similar view before. The following example borrowed from Class declaration - cppreference.com illustrates the downside of keeping the current table alignment style:
struct S
{
template<class CharT>
struct NestedS
{
std::string s;
static volatile unsigned long long i;
virtual void f0(int) = 0;
[[nodiscard]] bool bar();
template<typename T> void g(T&& n);
} d5, *d6;
// Column 100 --
// |
// V
template<class CharT> NestedS(std::basic_string<CharT>)
-> NestedS<CharT>;
S(std::size_t R, std::size_t C)
: d0(C), d1(R * C) {}
explicit S(int) {} // How to align this?
~S();
static volatile unsigned long long d0;
int d1;
int a[10] = {1, 2};
static const int d2 = 1;
virtual void f1(int) = 0;
std::string d3;
std::string* d4;
std::string f2(int);
[[nodiscard]] bool foo();
template<typename T> void f(T&& n);
using namespace clang;
enum class [[enum_extensibility(open)]] Direction : unsigned char { NORTH, SOUTH, EAST, WEST };
// How is the above supposed to be aligned?
// Align or not align?
typedef NestedS value_type, *pointer_type;
};