#include <tuple>
#include <memory>


template<typename T>
struct holder {};

struct abstract {

   virtual ~abstract() = 0;
};

abstract::~abstract() {}


int main() {
   using types 	   = std::tuple<abstract>;
   using holder_t  = holder<types>;

   // Ok
   holder_t local;

   // Ok
   new holder_t;

   // ?
   std::unique_ptr<holder_t> unique(new holder_t);

   // ?
   std::make_shared<holder_t>();
}
