TL; DR
std::reference_wrapper
このように使用してください:
#include <functional>
#include <string>
#include <vector>
#include <iostream>
int main()
{
std::string hello = "Hello, ";
std::string world = "everyone!";
typedef std::vector<std::reference_wrapper<std::string>> vec_t;
vec_t vec = {hello, world};
vec[1].get() = "world!";
std::cout << hello << world << std::endl;
return 0;
}
Demo
長い答え
規格が示唆、標準コンテナのX
タイプのオブジェクトを含むT
、T
でなければならないErasable
からX
。
Erasable
次の式の形式が正しいことを意味します。
allocator_traits<A>::destroy(m, p)
A
はコンテナのアロケータ型でm
あり、アロケータインスタンスでp
あり、型のポインタです*T
。定義についてはこちらをご覧くださいErasable
。
デフォルトでstd::allocator<T>
は、はベクターのアロケーターとして使用されます。デフォルトのアロケータでは、要件はの有効性と同じですp->~T()
(これT
は参照型でありp
、参照へのポインタです)。ただし、参照へのポインタは不正であるため、式の形式が正しくありません。