https://github.com/martinmoene/martin-moene.blogspot.com/blob/master/Static%20polymorphic%20named%20parameters%20in%20C%2B%2B/curve.hpp #if __cplusplus == 201103L namespace std { template< class T, class... Args > unique_ptr make_unique( Args&&... args ) { return unique_ptr( new T( std::forward( args )... ) ); } } #endif // crtp_cast: template D & crtp_cast(B & p) { return static_cast( p ); } template D const & crtp_cast(B const & p) { return static_cast( p ); } template D volatile & crtp_cast(B volatile & p) { return static_cast( p ); } template D const volatile & crtp_cast(B const volatile & p) { return static_cast( p ); }