#include #include namespace generator { template std::enable_if_t::value, std::shared_ptr> create(Args&&... args) { return std::make_shared(std::forward(args)...); } // impossible to construct template std::enable_if_t::value, std::shared_ptr> create(Args&&... ) { return nullptr; } } // namespace generator