class InitializerSharedPtr { protected: struct PrivateStruct { explicit PrivateStruct( int Irrelevant ) { } }; public: explicit InitializerSharedPtr( const PrivateStruct& ) { } InitializerSharedPtr( const PrivateStruct& DummyData, std::string DummyText, int DummyNumber ) { } template < typename... T > static std::shared_ptr< InitializerSharedPtr > CreatePtr( T&&...args ) { return( std::make_shared< InitializerSharedPtr >( PrivateStruct { 0 }, std::forward< T >( args )... ) ); } InitializerSharedPtr( const InitializerSharedPtr& ) = delete; const InitializerSharedPtr& operator =( const InitializerSharedPtr& ) = delete; };