Why do I get an error in “forming reference to reference type” map?

You cannot store references. References are just aliases to another variable.

The map needs a copy of the string to store:

map<pair<string, string>, string> m;

The reason you are getting that particular error is because somewhere in map, it’s going to do an operation on the mapped_type which in your case is string&. One of those operations (like in operator[], for example) will return a reference to the mapped_type:

mapped_type& operator[](const key_type&)

Which, with your mapped_type, would be:

string&& operator[](const key_type& _Keyval)

And you cannot have a reference to a reference:

Standard 8.3.4:

There shall be no references to references, no arrays of references, and no pointers to references.


On a side note, I would recommend you use typedef‘s so your code is easier to read:

int main()
{
    typedef pair<string, string> StringPair;
    typedef map<StringPair, string> StringPairMap;

    string test;

    StringPair p("Foo","Bar");
    StringPairMap m;
    m[make_pair("aa","bb")] = test;

   return 0;

}

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)