#include <list>
#include <memory>
struct IBaseType
{
} ;
class Type1 : public IBaseType
{
} ;
class Type2 : public IBaseType
{
} ;
template < typename ... T >
class CreateTypes
{
public :
CreateTypes( )
{
//[](...){ }((m_types.push_back(std::unique_ptr<T>(new T())))...);
[ ] ( ...) { } ( ( m_types.push_back ( new T( ) ) ) ...) ;
}
private :
//std::list<std::unique_ptr<IBaseType>> m_types;
std:: list < IBaseType* > m_types;
} ;
int main( )
{
CreateTypes< Type1, Type2> createTypes;
return 0 ;
}
I2luY2x1ZGUgPGxpc3Q+CiNpbmNsdWRlIDxtZW1vcnk+CgpzdHJ1Y3QgSUJhc2VUeXBlCnsKfTsKCmNsYXNzIFR5cGUxIDogcHVibGljIElCYXNlVHlwZQp7Cn07CgpjbGFzcyBUeXBlMiA6IHB1YmxpYyBJQmFzZVR5cGUKewp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFQ+CmNsYXNzIENyZWF0ZVR5cGVzCnsKcHVibGljOgogICAgQ3JlYXRlVHlwZXMoKQogICAgewogICAgICAgIC8vW10oLi4uKXsgfSgobV90eXBlcy5wdXNoX2JhY2soc3RkOjp1bmlxdWVfcHRyPFQ+KG5ldyBUKCkpKSkuLi4pOwoJW10oLi4uKXsgfSgobV90eXBlcy5wdXNoX2JhY2sobmV3IFQoKSkpLi4uKTsKICAgIH0KICAgIApwcml2YXRlOgoJLy9zdGQ6Omxpc3Q8c3RkOjp1bmlxdWVfcHRyPElCYXNlVHlwZT4+IG1fdHlwZXM7CglzdGQ6Omxpc3Q8SUJhc2VUeXBlKj4gbV90eXBlczsKfTsKCmludCBtYWluKCkKewoJQ3JlYXRlVHlwZXM8VHlwZTEsIFR5cGUyPiBjcmVhdGVUeXBlczsKCXJldHVybiAwOwp9