#include <vector>
#include <iostream>
constexpr size_t s = 8;
template<class T, size_t S = s>
void f()
{
auto x = T(S);
auto d = reinterpret_cast<size_t>(&*x.cend()) - reinterpret_cast<size_t>(&*x.cbegin());
std::cout
<< "\n"
<< "sizeof(x): " << sizeof(x) << "\n"
<< "x.size(): " << x.size() << "\n"
<< "reinterpret_cast<size_t>(&*x.cend()) - reinterpret_cast<size_t>(&*x.cbegin()): " << d << "\n"
<< "[bits/element]: " << 8 * d / x.size() << "\n"
<< std::endl
;
}
int main()
{
std::cout << "std::vector<int8_t>";
using t1 = std::vector<int8_t>;
f<t1>();
std::cout << "std::vector<int16_t>";
using t2 = std::vector<int16_t>;
f<t2>();
std::cout << "std::vector<int32_t>";
using t3 = std::vector<int32_t>;
f<t3>();
std::cout << "std::vector<int64_t>";
using t4 = std::vector<int64_t>;
f<t4>();
std::cout << "std::vector<int>";
using t5 = std::vector<int>;
f<t5>();
std::cout << "std::vector<bool>";
using t6 = std::vector<bool>;
// f<t6>();
}