The standard says: "In an explicit destructor call, the destructor is
specified by a ~ followed by a type-name or decltype-specifier that
denotes the destructor’s class type."
Type-name is defined as a class-name, enum-name or typedef-name.
Decltype-specifier would have a form decltype(...).
Your example does not conform to any of these variants, that's why the
compiler complains.
As to why the standard does not allow for more elaborate syntax at this
point I can only guess that this is because ~ already has another
meaning inherited from C (bitwise complement operator) and they did not
want to muddy the waters any more. But if so, why then allow
decltype-specifier which is also quite elaborate? (To be honest,
decltype-specifier seems to be not supported in this context by most C++
compilers.)