Code (also screenshot):
/***
Attempts to emplace new_vert in vertices,
returning false
if it failed (i.e., the vertex was already in vertices)
or true
if it succeeded
***/
template <typename T>
bool Graph<T>::addVert(const T& new_vert) {
return vertices.emplace(std::piecewise_construct,
std::forward_as_tuple(new_vert),
std::forward_as_tuple()).second();
};
As the screenshot shows, the error occurs on the last parenthesis of ".second()
".
vertices
is of type std::map<T, std::set<T>>
, and emplace()
should return a pair<iterator,bool>
, with the bool accessible via second()
, hence returning it. Different versions of the code (e.g., catching the pair with a variable foo
and returning foo.second()
) makes no difference; the error follows the last parenthesis of second()
.
Looking at other questions with this error, they seem to boil down to operators missing somewhere, but that doesn't seem to be the case here. Why is it happening?