Зачем перегружать одну функцию шаблона параметра помимо шаблона Variadi c? - PullRequest
6 голосов
/ 01 августа 2020

Я прочитал код из в g cc 10.2.0 source

    // Manage in-place contained object.
    template<typename _Tp>
      struct _Manager_internal
      {
    static void
    _S_manage(_Op __which, const any* __anyp, _Arg* __arg);

    template<typename _Up>
      static void
      _S_create(_Storage& __storage, _Up&& __value)
      {
        void* __addr = &__storage._M_buffer;
        ::new (__addr) _Tp(std::forward<_Up>(__value));
      }

    template<typename... _Args>
      static void
      _S_create(_Storage& __storage, _Args&&... __args)
      {
        void* __addr = &__storage._M_buffer;
        ::new (__addr) _Tp(std::forward<_Args>(__args)...);
      }
      };

И я не могу понять, почему есть два _S_create, второй - это надмножество первого, не так ли? Можем ли мы пропустить первую?

...