@@ -587,15 +587,114 @@ struct nsvp_DECLSPEC_EMPTY_BASES compressed_ptr : Cloner, Deleter
587587 }
588588#endif
589589
590- void swap ( compressed_ptr & other ) nsvp_noexcept
590+ void swap (compressed_ptr& other) nsvp_noexcept
591591 {
592592 using std::swap;
593- swap ( ptr, other.ptr );
593+ swap (ptr, other.ptr );
594594 }
595595
596596 pointer ptr;
597597};
598598
599+ template <class T , class Cloner , class Deleter >
600+ struct nsvp_DECLSPEC_EMPTY_BASES new_compressed_ptr // : Cloner, Deleter
601+ {
602+ // typedef T element_type;
603+ typedef T* pointer;
604+
605+ typedef Cloner cloner_type;
606+ typedef Deleter deleter_type;
607+
608+ // Lifetime:
609+
610+ ~new_compressed_ptr () {}
611+
612+ new_compressed_ptr () nsvp_noexcept {}
613+
614+ explicit new_compressed_ptr (pointer p) nsvp_noexcept {}
615+
616+ new_compressed_ptr (new_compressed_ptr const & other) {}
617+
618+ #if nsvp_CPP11_OR_GREATER
619+ new_compressed_ptr (new_compressed_ptr&& other) nsvp_noexcept {}
620+ #endif
621+
622+ explicit new_compressed_ptr (T const & value) {}
623+
624+ #if nsvp_CPP11_OR_GREATER
625+
626+ explicit new_compressed_ptr (T&& value) nsvp_noexcept {}
627+
628+ template <class ... Args>
629+ explicit new_compressed_ptr (nonstd_lite_in_place_t (T), Args&&... args)
630+ {
631+ }
632+
633+ template <class U , class ... Args>
634+ explicit new_compressed_ptr (nonstd_lite_in_place_t (T), std::initializer_list<U> il, Args&&... args)
635+ {
636+ }
637+
638+ #endif
639+
640+ new_compressed_ptr (T const & value, cloner_type const & cloner) {}
641+
642+ #if nsvp_CPP11_OR_GREATER
643+ new_compressed_ptr (T&& value, cloner_type&& cloner) nsvp_noexcept {}
644+ #endif
645+
646+ new_compressed_ptr (T const & value, cloner_type const & cloner, deleter_type const & deleter) {}
647+
648+ #if nsvp_CPP11_OR_GREATER
649+ new_compressed_ptr (T&& value, cloner_type&& cloner, deleter_type&& deleter) nsvp_noexcept {}
650+ #endif
651+
652+ explicit new_compressed_ptr (cloner_type const & cloner) {}
653+
654+ #if nsvp_CPP11_OR_GREATER
655+ explicit new_compressed_ptr (cloner_type&& cloner) nsvp_noexcept {}
656+ #endif
657+
658+ explicit new_compressed_ptr (deleter_type const & deleter) {}
659+
660+ #if nsvp_CPP11_OR_GREATER
661+ explicit new_compressed_ptr (deleter_type&& deleter) nsvp_noexcept {}
662+ #endif
663+
664+ new_compressed_ptr (cloner_type const & cloner, deleter_type const & deleter) {}
665+
666+ #if nsvp_CPP11_OR_GREATER
667+ new_compressed_ptr (cloner_type&& cloner, deleter_type&& deleter) nsvp_noexcept {}
668+ #endif
669+
670+ // Observers:
671+
672+ pointer get () const nsvp_noexcept { return nullptr ; }
673+
674+ cloner_type& get_cloner () nsvp_noexcept { return *this ; }
675+
676+ deleter_type& get_deleter () nsvp_noexcept { return *this ; }
677+
678+ // Modifiers:
679+
680+ pointer release () nsvp_noexcept { return nullptr ; }
681+
682+ void reset (pointer p) nsvp_noexcept {}
683+
684+ void reset (T const & v) {}
685+
686+ #if nsvp_CPP11_OR_GREATER
687+ void reset (T&& v) {}
688+ #endif
689+
690+ void swap (new_compressed_ptr& other) nsvp_noexcept {}
691+
692+ union {
693+ void * dummy;
694+ pointer ptr;
695+ };
696+ };
697+
599698} // namespace detail
600699
601700#if ! nsvp_CONFIG_NO_EXCEPTIONS
@@ -651,8 +750,8 @@ class value_ptr
651750 : ptr( p )
652751 {}
653752
654- value_ptr ( value_ptr const & other )
655- : ptr( other.ptr )
753+ value_ptr (value_ptr const & other)
754+ : ptr(other.ptr)
656755 {}
657756
658757#if nsvp_CPP11_OR_GREATER
0 commit comments