#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 ( new T( ) ) ) ...) ;
}
private :
std:: list < IBaseType* > m_types;
} ;
int main( )
{
CreateTypes< Type1, Type2> createTypes;
return 0 ;
}
I2luY2x1ZGUgPGxpc3Q+CiNpbmNsdWRlIDxtZW1vcnk+CgpzdHJ1Y3QgSUJhc2VUeXBlCnsKfTsKCmNsYXNzIFR5cGUxIDogcHVibGljIElCYXNlVHlwZQp7Cn07CgpjbGFzcyBUeXBlMiA6IHB1YmxpYyBJQmFzZVR5cGUKewp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFQ+CmNsYXNzIENyZWF0ZVR5cGVzCnsKcHVibGljOgogICAgQ3JlYXRlVHlwZXMoKQogICAgewogICAgICAgIFtdKC4uLil7IH0oKG1fdHlwZXMucHVzaF9iYWNrKG5ldyBUKCkpKS4uLik7CiAgICB9CiAgICAKcHJpdmF0ZToKICAgIHN0ZDo6bGlzdDxJQmFzZVR5cGUqPiBtX3R5cGVzOwp9OwoKaW50IG1haW4oKQp7CiAgICBDcmVhdGVUeXBlczxUeXBlMSwgVHlwZTI+IGNyZWF0ZVR5cGVzOwoJcmV0dXJuIDA7Cn0=