1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 3f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnant// The LLVM Compiler Infrastructure 4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details. 7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 9bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 10bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// <mutex> 11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// template <class L1, class L2, class... L3> 13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// void lock(L1&, L2&, L3&...); 14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <mutex> 16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cassert> 17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantclass L0 19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 20bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool locked_; 21bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0() : locked_(false) {} 24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant void lock() 26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant locked_ = true; 28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool try_lock() 31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant locked_ = true; 33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return locked_; 34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant void unlock() {locked_ = false;} 37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool locked() const {return locked_;} 39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantclass L1 42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool locked_; 44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1() : locked_(false) {} 47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant void lock() 49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant locked_ = true; 51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool try_lock() 54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant locked_ = false; 56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return locked_; 57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 58bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 59bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant void unlock() {locked_ = false;} 60bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 61bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool locked() const {return locked_;} 62bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 63bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 64bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantclass L2 65bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 66bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool locked_; 67bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 68bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 69bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2() : locked_(false) {} 70bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 71bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant void lock() 72bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 73bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant throw 1; 74bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 75bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 76bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool try_lock() 77bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 78bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant throw 1; 79bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return locked_; 80bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 81bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 82bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant void unlock() {locked_ = false;} 83bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 84bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool locked() const {return locked_;} 85bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 86bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 87bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main() 88bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 89bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 90bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 91bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 92bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::lock(l0, l1); 93bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l0.locked()); 94bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l1.locked()); 95bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 96bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 97bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 98bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l1; 99bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::lock(l0, l1); 100bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l0.locked()); 101bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l1.locked()); 102bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 103bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 104bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l0; 105bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 106bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::lock(l0, l1); 107bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l0.locked()); 108bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l1.locked()); 109bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 110bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 111bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 112bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l1; 113bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 114bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 115bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::lock(l0, l1); 116bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 117bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 118bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 119bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 120bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 121bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 122bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 123bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 124bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 125bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l0; 126bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 127bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 128bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 129bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::lock(l0, l1); 130bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 131bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 132bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 133bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 134bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 135bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 136bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 137bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 138bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 139bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l0; 140bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l1; 141bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 142bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 143bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::lock(l0, l1); 144bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 145bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 146bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 147bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 148bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 149bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 150bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 151bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 152bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 153bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l0; 154bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l1; 155bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 156bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 157bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::lock(l0, l1); 158bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 159bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 160bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 161bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 162bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 163bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 164bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 165bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 166bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 167bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l0; 168bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l1; 169bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 170bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 171bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::lock(l0, l1); 172bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 173bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 174bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 175bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 176bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 177bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 178bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 179bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 180bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#ifndef _LIBCPP_HAS_NO_VARIADICS 181bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 182bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 183bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 184bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l2; 185bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::lock(l0, l1, l2); 186bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l0.locked()); 187bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l1.locked()); 188bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l2.locked()); 189bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 190bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 191bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l0; 192bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l1; 193bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l2; 194bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 195bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 196bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::lock(l0, l1, l2); 197bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 198bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 199bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 200bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 201bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 202bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 203bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 204bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 205bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 206bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 207bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 208bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 209bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l2; 210bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::lock(l0, l1, l2); 211bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l0.locked()); 212bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l1.locked()); 213bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l2.locked()); 214bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 215bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 216bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 217bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l1; 218bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l2; 219bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::lock(l0, l1, l2); 220bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l0.locked()); 221bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l1.locked()); 222bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l2.locked()); 223bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 224bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 225bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l0; 226bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 227bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l2; 228bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::lock(l0, l1, l2); 229bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l0.locked()); 230bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l1.locked()); 231bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l2.locked()); 232bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 233bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 234bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 235bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 236bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l2; 237bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 238bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 239bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::lock(l0, l1, l2); 240bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 241bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 242bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 243bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 244bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 245bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 246bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 247bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 248bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 249bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 250bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 251bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l1; 252bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l2; 253bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 254bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 255bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::lock(l0, l1, l2); 256bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 257bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 258bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 259bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 260bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 261bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 262bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 263bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 264bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 265bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 266bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l0; 267bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 268bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l2; 269bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 270bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 271bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::lock(l0, l1, l2); 272bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 273bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 274bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 275bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 276bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 277bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 278bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 279bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 280bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 281bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 282bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l0; 283bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l1; 284bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l2; 285bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 286bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 287bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::lock(l0, l1, l2); 288bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 289bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 290bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 291bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 292bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 293bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 294bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 295bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 296bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 297bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 298bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l0; 299bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 300bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l2; 301bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 302bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 303bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::lock(l0, l1, l2); 304bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 305bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 306bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 307bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 308bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 309bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 310bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 311bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 312bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 313bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 314bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 315bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l1; 316bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l2; 317bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 318bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 319bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::lock(l0, l1, l2); 320bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 321bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 322bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 323bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 324bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 325bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 326bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 327bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 328bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 329bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 330bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l0; 331bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l1; 332bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l2; 333bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 334bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 335bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::lock(l0, l1, l2); 336bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 337bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 338bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 339bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 340bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 341bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 342bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 343bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 344bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 345bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 346bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l0; 347bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l1; 348bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l2; 349bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 350bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 351bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::lock(l0, l1, l2); 352bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 353bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 354bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 355bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 356bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 357bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 358bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 359bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 360bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 361bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 362bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l0; 363bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l1; 364bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l2; 365bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 366bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 367bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::lock(l0, l1, l2); 368bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 369bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 370bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 371bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 372bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 373bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 374bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 375bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 376bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 377bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 378bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 379bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 380bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l2; 381bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l3; 382bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::lock(l0, l1, l2, l3); 383bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l0.locked()); 384bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l1.locked()); 385bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l2.locked()); 386bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l3.locked()); 387bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 388bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 389bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 390bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 391bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l2; 392bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l3; 393bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::lock(l0, l1, l2, l3); 394bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l0.locked()); 395bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l1.locked()); 396bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l2.locked()); 397bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l3.locked()); 398bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 399bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 400bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 401bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 402bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l2; 403bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l3; 404bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::lock(l0, l1, l2, l3); 405bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l0.locked()); 406bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l1.locked()); 407bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l2.locked()); 408bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l3.locked()); 409bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 410bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 411bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 412bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l1; 413bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l2; 414bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l3; 415bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::lock(l0, l1, l2, l3); 416bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l0.locked()); 417bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l1.locked()); 418bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l2.locked()); 419bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l3.locked()); 420bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 421bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 422bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l0; 423bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 424bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l2; 425bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l3; 426bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::lock(l0, l1, l2, l3); 427bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l0.locked()); 428bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l1.locked()); 429bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l2.locked()); 430bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l3.locked()); 431bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 432bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 433bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 434bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 435bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l2; 436bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l3; 437bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 438bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 439bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::lock(l0, l1, l2, l3); 440bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 441bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 442bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 443bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 444bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 445bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 446bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 447bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l3.locked()); 448bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 449bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 450bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 451bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 452bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 453bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l2; 454bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l3; 455bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 456bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 457bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::lock(l0, l1, l2, l3); 458bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 459bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 460bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 461bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 462bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 463bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 464bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 465bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l3.locked()); 466bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 467bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 468bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 469bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 470bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l1; 471bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l2; 472bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l3; 473bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 474bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 475bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::lock(l0, l1, l2, l3); 476bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 477bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 478bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 479bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 480bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 481bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 482bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 483bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l3.locked()); 484bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 485bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 486bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 487bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l0; 488bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 489bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l2; 490bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l3; 491bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 492bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 493bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::lock(l0, l1, l2, l3); 494bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 495bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 496bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 497bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 498bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 499bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 500bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 501bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l3.locked()); 502bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 503bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 504f11ea144609929bb96a05f583ad7c29abd142730Howard Hinnant#endif // _LIBCPP_HAS_NO_VARIADICS 505bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 506