#include <iostream>
#include <vector>

template <class Derived>
struct Base
{
	Base()
	{
		static_cast<Derived*>(this)->foo();	
	}

	std::vector<int> m_ints;
};

struct Derived : Base<Derived>
{
	Derived() : Base() 
	{
		std::cout << a;
	}

	void foo()
	{
		m_ints.push_back(37);
		a = 4;
	}

	int a;
};

int main() 
{
	Derived d;
	return 0;
}