Почему не работает `std::pmr::string`?

Почему не работает std::pmr::string? https://godbolt.org/z/naYvrYxGq

#include <string>

int main()
{
  std::pmr::string x = "test";
}

/opt/compiler-explorer/gcc-10.2.0/include/c++/10.2.0/bits/basic_string.h:80:24: error: invalid use of incomplete type 'class std::pmr::polymorphic_allocator' 80 | rebind<_CharT>::other _Char_alloc_type; |


Ответы (1 шт):

Автор решения: valik

В хедеры контейнеров и прочих часто используемых вещей добавили только forward declarations для polymorphic_allocator. Например, в векторе libstdc++:

_GLIBCXX_BEGIN_NAMESPACE_VERSION
  namespace pmr {
    template<typename _Tp> class polymorphic_allocator;
    template<typename _Tp>
      using vector = std::vector<_Tp, polymorphic_allocator<_Tp>>;
  } // namespace pmr

Непонятно только, почему это не задокументировано в header synopsis только https://eel.is/c++draft/string.syn.

То есть если действительно хочешь использовать std::pmr::string, надо добавить <memory_resource>. Если не хочешь, то не будет оверхеда от простого включения <string>.

→ Ссылка