136ba399a3342eec3d5f2167dc71c073c6aef5a24Howard Hinnant//===----------------------------------------------------------------------===//
236ba399a3342eec3d5f2167dc71c073c6aef5a24Howard Hinnant//
336ba399a3342eec3d5f2167dc71c073c6aef5a24Howard Hinnant//                     The LLVM Compiler Infrastructure
436ba399a3342eec3d5f2167dc71c073c6aef5a24Howard Hinnant//
536ba399a3342eec3d5f2167dc71c073c6aef5a24Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open
636ba399a3342eec3d5f2167dc71c073c6aef5a24Howard Hinnant// Source Licenses. See LICENSE.TXT for details.
736ba399a3342eec3d5f2167dc71c073c6aef5a24Howard Hinnant//
836ba399a3342eec3d5f2167dc71c073c6aef5a24Howard Hinnant//===----------------------------------------------------------------------===//
936ba399a3342eec3d5f2167dc71c073c6aef5a24Howard Hinnant
1036ba399a3342eec3d5f2167dc71c073c6aef5a24Howard Hinnant// <vector>
1136ba399a3342eec3d5f2167dc71c073c6aef5a24Howard Hinnant// vector<bool>
1236ba399a3342eec3d5f2167dc71c073c6aef5a24Howard Hinnant
1336ba399a3342eec3d5f2167dc71c073c6aef5a24Howard Hinnant// std::find with vector<bool>::iterator
1436ba399a3342eec3d5f2167dc71c073c6aef5a24Howard Hinnant
15b7fd0be37076c8fe5a26a5850580426bcd4c0740Eric Fiselier// https://bugs.llvm.org/show_bug.cgi?id=16816
1636ba399a3342eec3d5f2167dc71c073c6aef5a24Howard Hinnant
1736ba399a3342eec3d5f2167dc71c073c6aef5a24Howard Hinnant#include <vector>
18e5e9bff62a4ae030ca42d312dc73f03d9cf61c4eMarshall Clow#include <algorithm>
1936ba399a3342eec3d5f2167dc71c073c6aef5a24Howard Hinnant#include <cassert>
2021208822a84ac01e34df721b7b45e67561f75b98Stephan T. Lavavej#include <cstddef>
2136ba399a3342eec3d5f2167dc71c073c6aef5a24Howard Hinnant
2236ba399a3342eec3d5f2167dc71c073c6aef5a24Howard Hinnantint main()
2336ba399a3342eec3d5f2167dc71c073c6aef5a24Howard Hinnant{
2436ba399a3342eec3d5f2167dc71c073c6aef5a24Howard Hinnant    {
2536ba399a3342eec3d5f2167dc71c073c6aef5a24Howard Hinnant        for (unsigned i = 1; i < 256; ++i)
2636ba399a3342eec3d5f2167dc71c073c6aef5a24Howard Hinnant        {
2736ba399a3342eec3d5f2167dc71c073c6aef5a24Howard Hinnant            std::vector<bool> b(i,true);
2836ba399a3342eec3d5f2167dc71c073c6aef5a24Howard Hinnant            std::vector<bool>::iterator j = std::find(b.begin()+1, b.end(), false);
2921208822a84ac01e34df721b7b45e67561f75b98Stephan T. Lavavej            assert(static_cast<std::size_t>(j-b.begin()) == i);
306b5be703db4c5ffa7f9231f0f2440b02b469bd38Marshall Clow            assert(b.end() == j);
3136ba399a3342eec3d5f2167dc71c073c6aef5a24Howard Hinnant        }
3236ba399a3342eec3d5f2167dc71c073c6aef5a24Howard Hinnant    }
3336ba399a3342eec3d5f2167dc71c073c6aef5a24Howard Hinnant    {
3436ba399a3342eec3d5f2167dc71c073c6aef5a24Howard Hinnant        for (unsigned i = 1; i < 256; ++i)
3536ba399a3342eec3d5f2167dc71c073c6aef5a24Howard Hinnant        {
3636ba399a3342eec3d5f2167dc71c073c6aef5a24Howard Hinnant            std::vector<bool> b(i,false);
3736ba399a3342eec3d5f2167dc71c073c6aef5a24Howard Hinnant            std::vector<bool>::iterator j = std::find(b.begin()+1, b.end(), true);
3821208822a84ac01e34df721b7b45e67561f75b98Stephan T. Lavavej            assert(static_cast<std::size_t>(j-b.begin()) == i);
396b5be703db4c5ffa7f9231f0f2440b02b469bd38Marshall Clow            assert(b.end() == j);
4036ba399a3342eec3d5f2167dc71c073c6aef5a24Howard Hinnant        }
4136ba399a3342eec3d5f2167dc71c073c6aef5a24Howard Hinnant    }
4236ba399a3342eec3d5f2167dc71c073c6aef5a24Howard Hinnant}
43