#include <iostream>
#include <type_traits>
#include <vector>


class ThingBase {
public:
	virtual void printHi() = 0;
	
};

class Thing : public ThingBase
{
	void printHi(){
		std::cout << "hi\n";
	}	
};


template<typename ThingType>
class Container{
private:
	std::vector<ThingType> m_things;
public:

	typename std::enable_if<std::is_base_of<ThingBase, ThingType>::value>::type p()
	{
		m_things[0].printHi();
	};
};


int main() {
	
	//Container<Thing> stuff; // works!
	Container<int> stuff; // doesn't work :(
	
	return 0;
}