template class allocator {}; template struct allocator_traits; template struct allocator_traits > { using pointer = _Tp*; }; struct mutex {}; template class Inplace { public: virtual void _M_dispose() noexcept { // bogus error ambiguous partial specializations typename allocator_traits<_Alloc>::pointer v; } }; inline void * allocate_shared() { return new Inplace> (); }