#include <list>
#include <type_traits>
template <typename Container>
class AwesomeClass
{
public:
typedef typename std::common_type< Container > value_type;
bool firstUse;
Container *theList;
typename Container::iterator theIterator;
explicit AwesomeClass(Container &list):theList(&list)
{
}
};
int main() {
// you can use typedef if you like
typedef std::list<int> intList;
intList list;
AwesomeClass<intList> newInt(list);
}
I2luY2x1ZGUgPGxpc3Q+CiNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KCnRlbXBsYXRlIDx0eXBlbmFtZSBDb250YWluZXI+CmNsYXNzIEF3ZXNvbWVDbGFzcwp7CiAgcHVibGljOgp0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6Y29tbW9uX3R5cGU8IENvbnRhaW5lciA+IHZhbHVlX3R5cGU7Cgpib29sIGZpcnN0VXNlOwoKQ29udGFpbmVyICp0aGVMaXN0Owp0eXBlbmFtZSBDb250YWluZXI6Oml0ZXJhdG9yIHRoZUl0ZXJhdG9yOwpleHBsaWNpdCBBd2Vzb21lQ2xhc3MoQ29udGFpbmVyICZsaXN0KTp0aGVMaXN0KCZsaXN0KQp7Cn0KfTsKaW50IG1haW4oKSB7CiAgICAvLyB5b3UgY2FuIHVzZSB0eXBlZGVmIGlmIHlvdSBsaWtlCiAgICB0eXBlZGVmIHN0ZDo6bGlzdDxpbnQ+IGludExpc3Q7CiAgICBpbnRMaXN0IGxpc3Q7CiAgICBBd2Vzb21lQ2xhc3M8aW50TGlzdD4gbmV3SW50KGxpc3QpOwp9