You need to use c++filt -t
for types so the following should work:
./shape | c++filt -t
the man page for c++filt says the following for -t
:
Attempt to demangle types as well as function names. This is disabled by default since mangled types are normally only used internally in the compiler, and they can be confused with non-mangled names. For example, a function called "a" treated as a mangled type name would be demangled to "signed char".