begin() iterator is expect to to point to the first row when used. This is not the case, the begin iterator increments.
The following returns values from 3 different rows:
auto s1 = (*reader.begin())[1].get();
auto s2 = (*reader.begin())[1].get();
auto s3 = (*reader.begin())[1].get();
for(::csv::CSVRow& row : reader)
{
}
auto s1 = (*reader.begin())[1].get(); <= index out of bounds: begin() == end()