-
Notifications
You must be signed in to change notification settings - Fork 0
/
test_type_sizes.cpp
71 lines (64 loc) · 1.54 KB
/
test_type_sizes.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/**********************************************
* Name: test_type_sizes.cpp
* Created: 19-Abr-2011
* Author: Gabriel Espinoza
<virtuosonic@users.sourceforge.net>
* License: MIT
********************************************/
#include <iostream>
#include <typeinfo>
#include <iomanip>
#include <climits>
#include <cstdint>
#include <cxxabi.h>
#include <memory>
using std::cout;
using std::endl;
using std::cin;
using std::setw;
using std::setiosflags;
using std::ios;
const unsigned bytesize = CHAR_BIT;
std::string demangle(const char* mangled)
{
int status;
std::unique_ptr<char[], void (*)(void*)> result(
abi::__cxa_demangle(mangled, 0, 0, &status), std::free);
return result.get() ? std::string(result.get()) : "error occurred";
}
template <class T> void print_size()
{
cout << " " << setiosflags(ios::left)
<< setw(12)
<< demangle(typeid(T).name())
<< resetiosflags(ios::left)
<< setw(3)<< sizeof (T) * bytesize
<<" bits" << endl;
}
int main()
{
cout << "types size:" << endl;
print_size<bool>();
print_size<char>();
print_size<wchar_t>();
print_size<short>();
print_size<int>();
print_size<long>();
print_size<long long>();
print_size<int8_t>();
print_size<int16_t>();
print_size<int32_t>();
print_size<uint8_t>();
print_size<uint16_t>();
print_size<uint32_t>();
size_t LLSIZE = sizeof(long long);
#if ( LLSIZE > 8)
print_size<__int128>();
#endif // sizeof
print_size<time_t>();
print_size<size_t>();
print_size<float>();
print_size<double>();
print_size<long double>();
cin.get();
}