#include <Eigen/Core>

#include <vector>
#include <iostream>

using namespace std;
using namespace Eigen;

template <typename T>
void log_alignment(const T* t)
{
  unsigned long long address = reinterpret_cast<unsigned long long>(t);  

  int max_alignment_check = 256;
  for (; max_alignment_check>1; max_alignment_check/=2)
  {
    if (address % max_alignment_check == 0)
      break;
  }

  std::cout << "Address 0x" << std::hex << address << " is " << std::dec << max_alignment_check << " bit aligned.\n";
}

struct B
{
  char c;
  Vector4f a;
};

int main()
{
  B b;
  B* b_ptr = new B;
  B* b_arr = new B[10];  
  std::vector<B> b_vec(10);

  log_alignment(&b);
  log_alignment(b_ptr);
  log_alignment(b_arr);  
  log_alignment(b_vec.data());
}
