I'm currently reading a book on C++11: "Exploring C++ 11 by Ray Lischner". I like it because I found it really useful and simple in explaining. The problem. Here "Listing 13-2. Local Variable Definitions" Where I get the issue:
int main() {
    std::vector<int> data{ 10, 57, 23, 81, 7, 5, 24 }; // I removed the line below in order not everytime I enter code.
//  data.insert(data.begin(), std::istream_iterator<int>(std::cin),
    //  std::istream_iterator<int>());
    for (std::vector<int>::iterator iter{ data.begin() }, end{ data.end() }; iter != end; ) {
        int value{ *iter };
        std::vector<int>::iterator here{ std::lower_bound(data.begin(), iter, value) };
        if (iter == here)
            ++iter; // already in sorted position
        else {
            // erase the out-of-position item, advancing iter at the same time.
            iter = data.erase(iter);
            data.insert(here, value);
        }
    }
    for (std::vector<int>::iterator iter{ data.begin() }, prev{ data.end() }, end{ data.end() };
    iter != end; ++iter) {
        if (prev != data.end())
            assert(not (*iter < *prev));
        prev = iter;
    }
    std::cout << '{';
    std::string separator{ " " };
    for (int element : data)
    {
        std::cout << separator << element;
        separator = ", ";
    }
    std::cout << " }\n";
    std::cout << std::endl;
    std::system("pause");
}
- So as you can see above the code is to sort a vector of integers. But When I run the program on MSVC14.0 I get the assertion dialog: "Vector iterator not dereferenceable". - int value{*iter}.
- What is the point in: - iter = data.erase(iter);? I mean the return value (What is the point in the return value here? I tried writting:- data.erase(iter);and works on GCC like charm.).
I tried the very code on GCC on ideone and it works fine!?
Please help me. Thank you in advance.
 
    