Почему не работает `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 шт):
В хедеры контейнеров и прочих часто используемых вещей добавили только 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>.