#ifndef PIMPL_IMPL_HPP_ #define PIMPL_IMPL_HPP_ #include template pimpl::pimpl () : m_ {new T {}} {} template template pimpl::pimpl (Args&& ...args) : m_ {new T {std::forward (args)...} } {} template pimpl::~pimpl () {} template T * pimpl::operator -> () {return m_.get ();} template T const * pimpl::operator -> () const {return m_.get ();} template T& pimpl::operator * () {return *m_.get ();} template T const& pimpl::operator * () const {return *m_.get ();} #endif