fork(1) download
  1. #include <iostream>
  2. #include <typeinfo>
  3. #include <type_traits>
  4. #include <cxxabi.h>
  5.  
  6. template <typename T>
  7. void print_type_info () {
  8. using namespace std;
  9. int status;
  10. auto type_name = abi::__cxa_demangle(typeid((T())).name(), 0, 0, &status);
  11. cout << type_name << " is "
  12. << (is_integral<T>::value ? "" : "not ") << "integral, "
  13. << (is_signed<T>::value ? "" : "un") << "signed, "
  14. << (is_unsigned<T>::value ? "un" : "") << "signed"
  15. << endl;
  16. }
  17.  
  18. int main() {
  19. enum foo : int {};
  20. enum bar : unsigned {};
  21.  
  22. print_type_info<int>();
  23. print_type_info<unsigned>();
  24. print_type_info<foo>();
  25. print_type_info<bar>();
  26. }
Success #stdin #stdout 0s 3276KB
stdin
Standard input is empty
stdout
int is integral, signed, signed
unsigned int is integral, unsigned, unsigned
main::foo is not integral, unsigned, signed
main::bar is not integral, unsigned, signed