<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>P3372R3: constexpr containers</title>
<link rel="stylesheet" href="data:text/css;base64,QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewoJOnJvb3QgewoJCS0tdGV4dC1jb2xvcjogI0JCQjsKCQktLWZvdW5kLWhpZ2hsaWdodDogYmx1ZTsKCQktLWZvdW5kLXRleHQtY29sb3I6IHdoaXRlOwoJCS0tbWFpbi1iYWNrZ3JvdW5kOiAzMiwzMiwzMjsKCQktLWhlYWRlci1jb2xvcjogd2hpdGU7CgkJLS1ib3gtc2hhZG93LWNvbG9yOiByZ2JhKDAsMCwwLDAuNSk7CiAgICAtLXRoaW4tYm94LXNoYWRvdy1jb2xvcjogcmdiYSgwLDAsMCwwLjEpOwoJCS0tbmF2LWJhY2tncm91bmQtY29sb3I6ICMxMDEwMTA7CgkJLS1jb2RlLWZvcmVncm91bmQtY29sb3I6IHdoaXRlOwoJCS0tY29kZS1pbmZvLWNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDAuMSk7CgkJLS1jb2RlLWJhY2tncm91bmQtY29sb3I6IHZhcigtLW5hdi1iYWNrZ3JvdW5kLWNvbG9yKTsKCQktLWxpbmstY29sb3I6ICM4ZWYzZmY7CgkJLS12aXNpdGVkLWxpbmstY29sb3I6ICNmMGZmODk7CgkJLS1ob3Zlci1saW5rLWNvbG9yOiAjYjNmN2ZmOwoJCS0taG92ZXItdmlzaXRlZC1saW5rLWNvbG9yOiAjYzhmZmIzOwoJCS0tbGluZS1jb2xvcjogMjU1LDI1NSwyNTU7CgkJLS1oZWFkZXItYmFja2dyb3VuZDogMCwwLDA7CgkJLS1xdW90ZS1sZWZ0LWNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDAuNSk7CgkJLS1oaWdobGlnaHQ6IHJnYmEoMjU1LDI1MiwwLDAuMjUpOwoJfQoJOjpzZWxlY3Rpb24gewoJICBjb2xvcjogYmxhY2s7CgkgIGJhY2tncm91bmQ6IGxpZ2h0eWVsbG93OwoJfQp9CgpAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBsaWdodCkgewoJOnJvb3QgewoJCS0tdGV4dC1jb2xvcjogYmxhY2s7CgkJLS1mb3VuZC1oaWdobGlnaHQ6IHllbGxvdzsKCQktLWZvdW5kLXRleHQtY29sb3I6IGJsYWNrOwoJCS0tbWFpbi1iYWNrZ3JvdW5kOiAyNTUsMjU1LDI1NTsKCQktLWhlYWRlci1jb2xvcjogYmxhY2s7CgkJLS1ib3gtc2hhZG93LWNvbG9yOiByZ2JhKDAsMCwwLDAuMyk7CiAgICAtLXRoaW4tYm94LXNoYWRvdy1jb2xvcjogcmdiYSgwLDAsMCwwLjEpOwoJCS0tbmF2LWJhY2tncm91bmQtY29sb3I6ICNGNUY1RjU7CgkJLS1jb2RlLWZvcmVncm91bmQtY29sb3I6IGJsYWNrOwoJCS0tY29kZS1pbmZvLWNvbG9yOiByZ2JhKDAsMCwwLDAuMSk7CgkJLS1jb2RlLWJhY2tncm91bmQtY29sb3I6IHZhcigtLW5hdi1iYWNrZ3JvdW5kLWNvbG9yKTsKCQktLWxpbmstY29sb3I6ICMwMDAwODI7CgkJLS12aXNpdGVkLWxpbmstY29sb3I6ICM1MDhkMGY7CgkJLS1ob3Zlci1saW5rLWNvbG9yOiAjNTc1N2MyOwoJCS0taG92ZXItdmlzaXRlZC1saW5rLWNvbG9yOiAjOTRjNTYwOwoJCS0tbGluZS1jb2xvcjogMTIsNDMsNzU7CgkJLS1oZWFkZXItYmFja2dyb3VuZDogMCwwLDA7CgkJLS1xdW90ZS1sZWZ0LWNvbG9yOiByZ2JhKDAsMCwwLDAuNSk7CgkJLS1oaWdobGlnaHQ6IHJnYmEoMjU1LDI1NCwyMDcsMC41KTsKCX0KCS8qCgkqOjpzZWxlY3Rpb24gewoJICBjb2xvcjogYmxhY2s7CgkgIGJhY2tncm91bmQ6ICNhNGMzZjY7Cgl9Ki8KfQoKQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewoJc3ZnIHsKCQktLWhhbmEtdGV4dDogYmxhY2s7CgkJLS1oYW5hLW91dGxpbmU6IGJsYWNrOwoJCS0taGFuYS1jb250cmFzdC10ZXh0OiByZ2JhKDI1NSwyNTUsMjU1LDAuNzUpOwoJCS0taGFuYS1pbmZvOiByZ2JhKDI1NSwyNTUsMjU1LDAuNik7CgkJLS1oYW5hLWxpbmVzOiB3aGl0ZTsKCQktLWhhbmEtc3BlY2lhbC1ib3hlczogcmdiYSgwLDAsMCwwLjUpOwoJCS0taGFuYS1zcGVjaWFsLWJveGVzLW91dGxpbmU6IHJnYmEoMjU1LDI1NSwyNTUsMC41KTsKCQktLWhhbmEtYm94ZXM6IHJnYmEoMjU1LDI1NSwyNTUsMC42KTsKCQktLWhhbmEtYm94ZXMtYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjEpOwoJCS0taGFuYS1pbnNpZGUtdGV4dDogd2hpdGU7CgkJLS1oYW5hLW91dHNpZGUtdGV4dDogdmFyKC0tdGV4dC1jb2xvcik7CgkJLS1oYW5hLXNoYWRvdzogd2hpdGU7CgkJLS1oYW5hLXN0cnVjdHVyZXMtb3V0bGluZTogd2hpdGU7CgkJLS1oYW5hLXN0cnVjdHVyZXMtZmlsbDogYmxhY2s7CgkJLS1oYW5hLXN0cnVjdHVyZXMtZmlsbC1tZWFuaW5nbGVzczogIzQ0NDsKCQktLWhhbmEtcGluay1maWxsOiAjYTM1NjdlOwoJCS0taGFuYS1wdXJwbGUtZmlsbDogIzRkNTM5ZDsKCQktLWhhbmEtZ3JlZW4tZmlsbDogIzFlNzQ1MTsKCQktLWhhbmEteWVsbG93LWZpbGw6ICM3Mjc1Mjk7CgkJLS1oYW5hLW9yYW5nZS1maWxsOiAjNzE0NTMwOwoJfQp9CgpAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBsaWdodCkgewoJc3ZnIHsKCQktLWhhbmEtdGV4dDogYmxhY2s7CgkJLS1oYW5hLW91dGxpbmU6IGJsYWNrOwoJCS0taGFuYS1jb250cmFzdC10ZXh0OiByZ2JhKDI1NSwyNTUsMjU1LDEpOwoJCS0taGFuYS1pbmZvOiByZ2JhKDAsMCwwLDAuNik7CgkJLS1oYW5hLWxpbmVzOiBibGFjazsKCQktLWhhbmEtc3BlY2lhbC1ib3hlczogcmdiYSgwLDAsMCwwLjkpOwoJCS0taGFuYS1zcGVjaWFsLWJveGVzLW91dGxpbmU6IHJnYmEoMjU1LDI1NSwyNTUsMC41KTsKCQktLWhhbmEtYm94ZXM6IHJnYmEoMCwwLDAsMC42KTsKCQktLWhhbmEtYm94ZXMtYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjEpOwoJCS0taGFuYS1pbnNpZGUtdGV4dDogdmFyKC0tdGV4dC1jb2xvcik7CgkJLS1oYW5hLW91dHNpZGUtdGV4dDogdmFyKC0tdGV4dC1jb2xvcik7CgkJLS1oYW5hLXNoYWRvdzogYmxhY2s7CgkJLS1oYW5hLXN0cnVjdHVyZXMtb3V0bGluZTogYmxhY2s7CgkJLS1oYW5hLXN0cnVjdHVyZXMtZmlsbDogd2hpdGU7CgkJLS1oYW5hLXN0cnVjdHVyZXMtZmlsbC1tZWFuaW5nbGVzczogbGlnaHRncmF5OwoJCS0taGFuYS1waW5rLWZpbGw6ICNmZmFjZDY7CgkJLS1oYW5hLXB1cnBsZS1maWxsOiAjYWNhY2ZmOwoJCS0taGFuYS1ncmVlbi1maWxsOiAjYWNmZmQ1OwoJCS0taGFuYS15ZWxsb3ctZmlsbDogI2ZmZmZhYzsKCQktLWhhbmEtb3JhbmdlLWZpbGw6ICNmZmM4YWQ7Cgl9Cn0KCnN2ZyBnI2JveGVzICogewoJZmlsbDogdmFyKC0taGFuYS1ib3hlcyk7CglmaWxsLW9wYWNpdHk6IDAuMTsKCXN0cm9rZTogdmFyKC0taGFuYS1ib3hlcyk7Cn0Kc3ZnIGcjc3BlY2lhbCB7CglvcGFjaXR5OiAwLjI1Owp9CnN2ZyBnI2JsYWNrLW91dGxpbmUgKiB7CglzdHJva2U6IHZhcigtLWhhbmEtb3V0bGluZSk7Cn0Kc3ZnIGcjdGV4dCAqIHsKCWZpbGw6IHZhcigtLWhhbmEtdGV4dCk7Cn0Kc3ZnIGcjaW5mbyAqIHsKCWZpbGw6IHZhcigtLWhhbmEtaW5mbyk7Cn0Kc3ZnIGcjaW5mbyB0ZXh0IHsKCWZpbGw6IHZhcigtLWhhbmEtaW5mbyk7Cn0Kc3ZnIGcjY29udHJhc3QtdGV4dCAqIHsKCWZpbGw6IHZhcigtLWhhbmEtY29udHJhc3QtdGV4dCk7Cn0Kc3ZnIGcjY29udHJhc3QtYmxhY2stb3V0bGluZSAqIHsKCWZpbGw6IHZhcigtLWhhbmEtc3BlY2lhbC1ib3hlcyk7CglzdHJva2U6IHZhcigtLWhhbmEtc3BlY2lhbC1ib3hlcy1vdXRsaW5lKTsKfQpzdmcgZyNibGFjay1saW5lcyAqIHsKCXN0cm9rZTogdmFyKC0taGFuYS1saW5lcyk7Cn0Kc3ZnIGcjYmxhY2stbGluZXMgcG9seWdvbiB7CglmaWxsOiB2YXIoLS1oYW5hLWxpbmVzKTsKfQoKLyogaW5oZXJpdGFuY2UgKi8Kc3ZnIGcjb3V0c2lkZS10ZXh0ICogewoJZmlsbDogdmFyKC0taGFuYS1vdXRzaWRlLXRleHQpOwp9CnN2ZyBnI2luc2lkZS10ZXh0ICogewoJZmlsbDogdmFyKC0taGFuYS1pbnNpZGUtdGV4dCk7Cn0Kc3ZnIGcjc2hhZG93IHBhdGggewoJZmlsbDogdmFyKC0taGFuYS1zaGFkb3cpOwoJb3BhY2l0eTogMC4xOwp9CnN2ZyBnI2Fycm93cyBnIHBhdGgsIHN2ZyBnI2Fycm93cyBnIGxpbmUgewoJc3Ryb2tlOiB2YXIoLS1oYW5hLXN0cnVjdHVyZXMtb3V0bGluZSk7Cn0Kc3ZnIGcjYXJyb3dzIGcgcG9seWdvbiB7CglmaWxsOiB2YXIoLS1oYW5hLXN0cnVjdHVyZXMtb3V0bGluZSk7Cn0Kc3ZnIGcjc3RydWN0dXJlcyA+ICogewoJc3Ryb2tlOiB2YXIoLS1oYW5hLXN0cnVjdHVyZXMtb3V0bGluZSk7CglmaWxsOiB2YXIoLS1oYW5hLXN0cnVjdHVyZXMtZmlsbCk7Cn0Kc3ZnIGcjaXRlbXMgZyNtZWFuaW5nbGVzcyA+ICogewoJZmlsbDogdmFyKC0taGFuYS1zdHJ1Y3R1cmVzLWZpbGwtbWVhbmluZ2xlc3MpOwp9CnN2ZyBnI2l0ZW1zIGcjcGluayA+ICogewoJZmlsbDogdmFyKC0taGFuYS1waW5rLWZpbGwpOwp9CnN2ZyBnI2l0ZW1zIGcjb3JhbmdlID4gKiB7CglmaWxsOiB2YXIoLS1oYW5hLW9yYW5nZS1maWxsKTsKfQpzdmcgZyNpdGVtcyBnI3B1cnBsZSA+ICogewoJZmlsbDogdmFyKC0taGFuYS1wdXJwbGUtZmlsbCk7Cn0Kc3ZnIGcjaXRlbXMgZyN5ZWxsb3cgPiAqIHsKCWZpbGw6IHZhcigtLWhhbmEteWVsbG93LWZpbGwpOwp9CnN2ZyBnI2l0ZW1zIGcjZ3JlZW4gPiAqIHsKCWZpbGw6IHZhcigtLWhhbmEtZ3JlZW4tZmlsbCk7Cn0Kc3ZnIGcjaXRlbXMgKiB7CglzdHJva2U6IHZhcigtLWhhbmEtc3RydWN0dXJlcy1vdXRsaW5lKTsKfQoKCnNwYW46dGFyZ2V0LCBwOnRhcmdldCwgbGk6dGFyZ2V0LCBkaXY6dGFyZ2V0IHsKICBiYWNrZ3JvdW5kOiB2YXIoLS1oaWdobGlnaHQpOwp9CgoubmFtZS1vZi1wYXBlciB7Cglmb250LXNpemU6IDI4cHg7CglwYWRkaW5nLXRvcDogMC41ZW07Cn0KCnNwYW4uZm91bmQgewoJdGV4dC1zaGFkb3c6IDAgMCAxMHB4IHZhcigtLWZvdW5kLWhpZ2hsaWdodCksICAwIDAgMTBweCB2YXIoLS1mb3VuZC1oaWdobGlnaHQpLCAgMCAwIDEwcHggdmFyKC0tZm91bmQtaGlnaGxpZ2h0KSwgIDAgMCAxMHB4IHZhcigtLWZvdW5kLWhpZ2hsaWdodCk7Cgljb2xvcjogdmFyKC0tZm91bmQtdGV4dC1jb2xvcikgIWltcG9ydGFudDsKfQoKYm9keSB7Cglmb250LWZhbWlseTogSGVsdmV0aWNhOwoJcGFkZGluZzogMDsKCW1hcmdpbjogMDsKCW92ZXJmbG93OiBoaWRkZW47Cgljb2xvcjogdmFyKC0tdGV4dC1jb2xvcik7CgliYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKHZhcigtLW1haW4tYmFja2dyb3VuZCksIDEpOwp9Cgpib2R5ID4gZGl2IHsKCWRpc3BsYXk6IGZsZXg7CglwYWRkaW5nOiAwOwoJbWFyZ2luOiAwOwp9CgouaGlkZS1vbi1uYXJyb3cgewoJZGlzcGxheTogaW5oZXJpdDsKfQoKLmhpZGUtb24td2lkZSB7CglkaXNwbGF5OiBub25lOwp9CgpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDExMDBweCkgewoJYm9keSB7CgkJb3ZlcmZsb3c6IGluaGVyaXQgIWltcG9ydGFudDsKCX0KCS5oaWRlLW9uLW5hcnJvdyB7CgkJZGlzcGxheTogbm9uZTsKCX0KCS5oaWRlLW9uLXdpZGUgewoJCWRpc3BsYXk6IGluaGVyaXQ7Cgl9Cglib2R5ID4gZGl2IHsKCQlkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OwoJfQoJYXJ0aWNsZSB7CgkJb3ZlcmZsb3c6IGluaGVyaXQgIWltcG9ydGFudDsKCQliYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHRyYW5zcGFyZW50LHJnYmEodmFyKC0tbWFpbi1iYWNrZ3JvdW5kKSwwLjYpLCByZ2JhKHZhcigtLW1haW4tYmFja2dyb3VuZCksMC44KSwgcmdiYSh2YXIoLS1tYWluLWJhY2tncm91bmQpLDAuNiksIHRyYW5zcGFyZW50KSAhaW1wb3J0YW50OwoJfQoJbmF2LCBhcnRpY2xlIHsKCQlmbGV4OiBpbml0aWFsICFpbXBvcnRhbnQ7Cgl9CgluYXYgewoJCW1pbi13aWR0aDogaW5pdGlhbCAhaW1wb3J0YW50OwoJCW1heC13aWR0aDogaW5pdGlhbCAhaW1wb3J0YW50OwoJCW1pbi1oZWlnaHQ6IGluaXRpYWwgIWltcG9ydGFudDsKCQltYXgtaGVpZ2h0OiBpbml0aWFsICFpbXBvcnRhbnQ7CgkJYm94LXNoYWRvdzogMCAxMHB4IDAgdmFyKC0tYm94LXNoYWRvdy1jb2xvcik7Cgl9CgluYXYgPiBkaXYgewoJCW92ZXJmbG93OiBpbmhlcml0ICFpbXBvcnRhbnQ7CgkJcG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7CgkJbWF4LXdpZHRoOiBpbml0aWFsICFpbXBvcnRhbnQ7CgkJbWF4LWhlaWdodDogaW5pdGlhbCAhaW1wb3J0YW50OwoJfQoJZGl2Omhhcyg+IGlucHV0W3R5cGU9c2VhcmNoXSkgewoJCWRpc3BsYXk6IG5vbmU7Cgl9CglkaXYucXVvdGUgewoJCW92ZXJmbG93LXg6IHZpc2libGU7CiAgICBvdmVyZmxvdy15OiB2aXNpYmxlOwoJfQp9CgpuYXYgewoJcGFkZGluZzogMCAwLjVlbTsKCW1hcmdpbjogMDsKCWZsZXg6IDEgMSAwOwoJbWluLXdpZHRoOiAzNTBweDsKCW1heC13aWR0aDogMzUwcHg7Cglib3gtc2hhZG93OiAwIDAgMTBweCB2YXIoLS1ib3gtc2hhZG93LWNvbG9yKTsKCWJhY2tncm91bmQtY29sb3I6IHZhcigtLW5hdi1iYWNrZ3JvdW5kLWNvbG9yKTsKfQoKbmF2ID4gZGl2IHsKCXBvc2l0aW9uOiBmaXhlZDsKCW1heC13aWR0aDogMzUwcHg7CgltYXgtaGVpZ2h0OiAxMDAlOwoJb3ZlcmZsb3c6IHNjcm9sbDsKCXRvcDogMDsKCWxlZnQ6IDA7CglwYWRkaW5nOiAwIDAuNWVtOwoJbWFyZ2luOiAwOwp9CgpuYXYgPiBkaXYgPiBkaXYgewoJcGFkZGluZzogMC41ZW07CglwYWRkaW5nLXRvcDogMDsKCXBhZGRpbmctYm90dG9tOiAxZW07Cn0KCmFydGljbGUgewoJZmxleDogMyAxIDA7CglvdmVyZmxvdzogc2Nyb2xsOwoJaGVpZ2h0OiAxMDB2aDsKCXRleHQtYWxpZ246IGp1c3RpZnk7CgliYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCB0cmFuc3BhcmVudCxyZ2JhKHZhcigtLW1haW4tYmFja2dyb3VuZCksMC42KSwgcmdiYSh2YXIoLS1tYWluLWJhY2tncm91bmQpLDAuOCksIHJnYmEodmFyKC0tbWFpbi1iYWNrZ3JvdW5kKSwwLjYpLCB0cmFuc3BhcmVudCk7CglwYWRkaW5nOiAwOwoJbWFyZ2luOiAwOwp9CgphcnRpY2xlID4gZGl2IHsKCXBhZGRpbmctcmlnaHQ6IDEuNWVtOwoJcGFkZGluZy1sZWZ0OiAxLjVlbTsKCXBhZGRpbmctYm90dG9tOiAxZW07Cn0KCmNvZGUgewoJCn0KCmRpdi5xdW90ZSB7Cgljb2xvcjogdmFyKC0tY29kZS1mb3JlZ3JvdW5kLWNvbG9yKTsKCWJhY2tncm91bmQ6IHZhcigtLWNvZGUtYmFja2dyb3VuZC1jb2xvcik7CglwYWRkaW5nOiAxZW07Cglib3JkZXItcmFkaXVzOiAwcHggMTVweCAxNXB4IDBweDsKCWJvcmRlci1sZWZ0OiA1cHggc29saWQgdmFyKC0tcXVvdGUtbGVmdC1jb2xvcik7Cglmb250LXN0eWxlOiBpdGFsaWM7CgltYXJnaW46IDFlbTsKfQoKY29kZTpub3QocHJlID4gY29kZSkgewoJY29sb3I6IGluaGVyaXQ7CgliYWNrZ3JvdW5kOiB2YXIoLS1jb2RlLWJhY2tncm91bmQtY29sb3IpOwoJYm9yZGVyLXJhZGl1czogNXB4OwoJcGFkZGluZzogMCAwLjJlbTsKCW1hcmdpbjogMCAycHg7CglvdXRsaW5lOiAycHggc29saWQgdmFyKC0tY29kZS1iYWNrZ3JvdW5kLWNvbG9yKTsKfQoKcHJlID4gY29kZSB7CglvdXRsaW5lOiBub25lOwoJbGluZS1oZWlnaHQ6IDEuNDsKCXRhYi1zaXplOiAyOwp9CgpwcmU6aGFzKGNvZGUpIHsKCWNvbG9yOiB2YXIoLS1jb2RlLWZvcmVncm91bmQtY29sb3IpOwoJYmFja2dyb3VuZDogdmFyKC0tY29kZS1iYWNrZ3JvdW5kLWNvbG9yKTsKCXBhZGRpbmc6IDFlbTsKCWJvcmRlci1yYWRpdXM6IDE1cHg7Cglwb3NpdGlvbjogcmVsYXRpdmU7Cgl6LWluZGV4OiAxOwoJb3ZlcmZsb3cteDogdmlzaWJsZTsKCW92ZXJmbG93LXk6IHZpc2libGU7Cn0KCnByZTpoYXMoY29kZS5sYW5ndWFnZS1jYXJib24pOjpiZWZvcmUgewoJY29udGVudDogIkNhcmJvbiI7Cgl0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwoJcG9zaXRpb246IGFic29sdXRlOwoJdG9wOiAxZW07CglyaWdodDogMWVtOwoJY29sb3I6IHZhcigtLWNvZGUtaW5mby1jb2xvcik7Cglmb250LXdlaWdodDogYm9sZDsKfQoKcCwgdWwgPiBsaSB7Cgl0ZXh0LWFsaWduOiBqdXN0aWZ5OwoJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCWh5cGhlbnM6IGF1dG87Cn0KCmFydGljbGUgdWwgPiBsaSB7CglwYWRkaW5nLWJvdHRvbTogMC4yNWVtOwp9CgpkaXYuZGVzY3JpcHRpb24gdWwgewogIHBhZGRpbmctdG9wOiAwLjVlbTsKCXBhZGRpbmctYm90dG9tOiAwLjVlbTsKfQoKYSB7Cgljb2xvcjogdmFyKC0tbGluay1jb2xvcik7Cgl0ZXh0LWRlY29yYXRpb24tc3R5bGU6IGRvdHRlZDsKfQoKYTpob3ZlciB7Cgljb2xvcjogdmFyKC0taG92ZXItbGluay1jb2xvcik7Cgl0ZXh0LWRlY29yYXRpb24tc3R5bGU6IHNvbGlkOwp9CgphOnZpc2l0ZWQgewoJY29sb3I6IHZhcigtLXZpc2l0ZWQtbGluay1jb2xvcik7Cn0KCmE6dmlzaXRlZDpob3ZlciB7Cgljb2xvcjogdmFyKC0taG92ZXItdmlzaXRlZC1saW5rLWNvbG9yKTsKCXRleHQtZGVjb3JhdGlvbi1zdHlsZTogc29saWQ7Cn0KCmgxLCBoMiwgaDMsIGg0LCBoNSB7Cgl0ZXh0LWFsaWduOiBsZWZ0OwoJbWFyZ2luOiAwOwoJbWFyZ2luLWJvdHRvbTogMTBweDsKCXBhZGRpbmc6IDAuNWVtOwoJcGFkZGluZy10b3A6IDIwcHg7CglwYWRkaW5nLWJvdHRvbTogMnB4OwoJei1pbmRleDogMjsKCWNvbG9yOiB2YXIoLS1oZWFkZXItY29sb3IpICFpbXBvcnRhbnQ7CglhIHsKCQljb2xvcjogdmFyKC0taGVhZGVyLWNvbG9yKSAhaW1wb3J0YW50OwoJfQp9CgphcnRpY2xlIGgxLCBhcnRpY2xlIGgyLCBhcnRpY2xlIGgzLCBhcnRpY2xlIGg0LCBhcnRpY2xlIGg1IHsKLyoJcG9zaXRpb246IHN0aWNreTsKCXBvc2l0aW9uOiAtd2Via2l0LXN0aWNreTsKCXRvcDogMDsqLwoJCn0KCmgxIHsKCWZvbnQtd2VpZ2h0OiA4MDA7Cglib3JkZXItYm90dG9tOiByZ2JhKHZhcigtLWxpbmUtY29sb3IpLCAxKSBkb3R0ZWQgMnB4Owp9CgpoMiB7Cglmb250LXdlaWdodDogODAwOwoJYm9yZGVyLWJvdHRvbTogcmdiYSh2YXIoLS1saW5lLWNvbG9yKSwgMC43NSkgZG90dGVkIDJweDsKfQoKaDMsIGg0LCBoNSB7Cglmb250LXdlaWdodDogNjAwOwoJYm9yZGVyLWJvdHRvbTogcmdiYSh2YXIoLS1saW5lLWNvbG9yKSwgMC4zMykgZG90dGVkIDJweDsKfQoKaDEgPiBhLCBoMiA+IGEsIGgzID4gYSwgaDQgPiBhLCBoNSA+IGEgewoJdGV4dC1kZWNvcmF0aW9uOiBpbmhlcml0Owp9CgpoMTp0YXJnZXQ6OmFmdGVyLCBoMjp0YXJnZXQ6OmFmdGVyLCBoMzp0YXJnZXQ6OmFmdGVyLCBoNDp0YXJnZXQ6OmFmdGVyLCBoNTp0YXJnZXQ6OmFmdGVyIHsKCXRleHQtZGVjb3JhdGlvbjogaW5oZXJpdDsKCWNvbnRlbnQ6ICIg4pqT77iOIjsKICBmb250LXNpemU6IDE0cHg7Cn0KCmgxID4gYTpob3ZlciwgaDIgPiBhOmhvdmVyLCBoMyA+IGE6aG92ZXIsIGg0ID4gYTpob3ZlciwgaDUgPiBhOmhvdmVyIHsKCWNvbG9yOiB2YXIoLS1ob3Zlci1saW5rLWNvbG9yKTsKfQoKZGl2Omhhcyg+IGlucHV0W3R5cGU9c2VhcmNoXSkgewoJcG9zaXRpb246IGZpeGVkOwoJdG9wOiAwOwoJcmlnaHQ6IDA7Cgl6LWluZGV4OiAxMDAwOwoJcGFkZGluZzogMC41ZW07CgliYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1uYXYtYmFja2dyb3VuZC1jb2xvcik7Cglib3gtc2hhZG93OiAwIDAgMTBweCByZ2JhKDAsMCwwLDAuMyk7Cglib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAxMHB4Owp9CgpkaXYgPiBpbnB1dFt0eXBlPXNlYXJjaF0gewoJYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbmF2LWJhY2tncm91bmQtY29sb3IpOwoJYm9yZGVyOiAycHggc29saWQgdmFyKC0tdGV4dC1jb2xvcik7Cgljb2xvcjogdmFyKC0tdGV4dC1jb2xvcik7Cgl3aWR0aDogMzAwcHg7Cn0KCmRpdi5wYXBlci1pbmZvIHsKCXBhZGRpbmc6IDA7CglwYWRkaW5nLXRvcDogMWVtOwoJCgkua2V5IHsKCQlmb250LXdlaWdodDogYm9sZDsKCX0KCQoJZGl2IHsKCX0KfQoKdWwgewoJcGFkZGluZzogMDsKCW1hcmdpbjogMDsKCXBhZGRpbmctbGVmdDogMWVtOwp9CgpkaXYjdG9jID4gdWwgewoJbWFyZ2luLWxlZnQ6IDFlbTsKfQoKZGl2I3RvYyB1bCB7CglwYWRkaW5nLWxlZnQ6IDAuNWVtOwp9CgpsaSA+IHVsIHsKCXBhZGRpbmctbGVmdDogMC4yNWVtOwp9Cgp1bCA+IGxpIHsKCXBhZGRpbmctbGVmdDogMC4yNWVtOwp9CgpkaXYjdG9jIGxpIHsKCXRleHQtYWxpZ246IGxlZnQ7Cn0KCmNvZGUgLmVycm9yLCBjb2RlIC5iZWZvcmUgewoJbGluZS1oZWlnaHQ6IDEuOTsKfQoKY29kZSAuZXJyb3IgPiAqLCBjb2RlIC5iZWZvcmUgPiAqIHsKCWJhY2tncm91bmQtY29sb3I6ICNGRjg4ODggIWltcG9ydGFudDsKCWNvbG9yOiBibGFjayAhaW1wb3J0YW50OwoJQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewoJCWNvbG9yOiB3aGl0ZTsKCX0KCWJvcmRlcjogM3B4IHNvbGlkICNGRjg4ODg7Cglmb250LXdlaWdodDogYm9sZDsKfQoKY29kZSAuYWZ0ZXIgPiAqIHsKCWJhY2tncm91bmQtY29sb3I6IGxpZ2h0Z3JlZW4gIWltcG9ydGFudDsKCWNvbG9yOiBibGFjayAhaW1wb3J0YW50OwoJQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewoJCWNvbG9yOiB3aGl0ZTsKCX0KCWJvcmRlcjogM3B4IHNvbGlkIGxpZ2h0Z3JlZW47Cglmb250LXdlaWdodDogYm9sZDsKfQoKY29kZSAudW5jaGFuZ2VkID4gKiB7CgliYWNrZ3JvdW5kLWNvbG9yOiBsaWdodHllbGxvdyAhaW1wb3J0YW50OwoJY29sb3I6IGJsYWNrICFpbXBvcnRhbnQ7CglAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7CgkJY29sb3I6IHdoaXRlOwoJfQoJYm9yZGVyOiAzcHggc29saWQgbGlnaHR5ZWxsb3c7Cglmb250LXdlaWdodDogYm9sZDsKfQoKY29kZSAuaW52aXNpYmxlIHsKCXZpc2liaWxpdHk6IGhpZGRlbjsKfQoKLmNoYW5nZXMgewoJZGlzcGxheTogaW5saW5lLWJsb2NrOwp9Cgoud29yZGluZyBoMSwgLndvcmRpbmcgaDEgPiBhLCAud29yZGluZyBoMiwgLndvcmRpbmcgaDIgPiBhIHsKCWZvbnQtc2l6ZTogaW5oZXJpdDsKCXRleHQtZGVjb3JhdGlvbjogbm9uZTsKCWJvcmRlcjogbm9uZTsKCXBhZGRpbmc6IDA7CgltYXJnaW46IDA7CglAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7CgkJY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7Cgl9CglAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBsaWdodCkgewoJCWNvbG9yOiBibGFjayAhaW1wb3J0YW50OwoJfQoJCgkvKmNvbG9yOiBvcmFuZ2UgIWltcG9ydGFudDsqLwp9Cgoud29yZGluZyBwIHsKCXBhZGRpbmc6IDA7CglwYWRkaW5nLXRvcDogMC41ZW07CgltYXJnaW46IDA7Cn0KCi53b3JkaW5nIGEgewoJdGV4dC1kZWNvcmF0aW9uOiBub25lOwoJY29sb3I6IGluaGVyaXQ7Cn0KCi53b3JkaW5nIGE6aG92ZXIgewoJdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cgljb2xvcjogdmFyKC0tbGluay1jb2xvcik7Cn0KCi53b3JkaW5nIGE6dmlzaXRlZCB7Cgp9Cgoud29yZGluZyBjb2RlIHsKCWJhY2tncm91bmQ6IGluaGVyaXQgIWltcG9ydGFudDsKCWJvcmRlcjogbm9uZTsKCW91dGxpbmU6IG5vbmU7Cn0KCQoud29yZGluZyB7Cglmb250LWZhbWlseTogIk5vdG8gU2VyaWYiOwoJCglwYWRkaW5nOiAwLjVlbSAxZW07CglwYWRkaW5nLWJvdHRvbTogMWVtOwoJY29sb3I6IHZhcigtLWNvZGUtZm9yZWdyb3VuZC1jb2xvcik7CgliYWNrZ3JvdW5kOiB2YXIoLS1jb2RlLWJhY2tncm91bmQtY29sb3IpOwoJbGluZS1oZWlnaHQ6IDEuNTU7CgkKCWJvcmRlci1yYWRpdXM6IDE1cHg7Cglwb3NpdGlvbjogcmVsYXRpdmU7Cgl6LWluZGV4OiAxOwoJb3ZlcmZsb3cteDogdmlzaWJsZTsKCW92ZXJmbG93LXk6IHZpc2libGU7Cn0KCQoud29yZGluZyAuYWRkZWQsIHByZSAuYWRkZWQgewoJYmFja2dyb3VuZC1jb2xvcjogbGlnaHRncmVlbjsKCXRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogIHRleHQtZGVjb3JhdGlvbi1jb2xvcjogZ3JlZW47CiAgdGV4dC1kZWNvcmF0aW9uLXRoaWNrbmVzczogMnB4ICFpbXBvcnRhbnQ7Cgl6LWluZGV4OiA4MDsKCXBhZGRpbmc6IDNweDsKCUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHsKCQljb2xvcjogYmxhY2sgIWltcG9ydGFudDsKCX0KfQoKLmhpZ2hsaWdodCB7Cglib3JkZXItcmFkaXVzOiA1cHg7Cglib3JkZXI6IDVweCBzb2xpZCAjZmZmNTg3OwoJYmFja2dyb3VuZC1jb2xvcjogI2ZmZjU4NzsKCWNvbG9yOiBibGFjazsKCXotaW5kZXg6IC01OwoJdGV4dC1zaGFkb3c6IDAgMCA1cHggd2hpdGU7CglAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7CgkJYm9yZGVyOiA1cHggc29saWQgIzAwMTY3NjsKCQliYWNrZ3JvdW5kLWNvbG9yOiAjMDAxNjc2OwoJCWNvbG9yOiB3aGl0ZTsKCQl0ZXh0LXNoYWRvdzogMCAwIDEwcHggYmxhY2s7Cgl9CgkKCQp9CgpkaXYuYWRkZWQgcHJlLmFkZGVkICosIGRpdi5hZGRlZCBwcmUuYWRkZWQgewoJdGV4dC1kZWNvcmF0aW9uLWNvbG9yOiB0cmFuc3BhcmVudDsKfQoKLndvcmRpbmcgLmFkZGVkLWl0ZW0gewoJYmFja2dyb3VuZC1jb2xvcjogbGlnaHRncmVlbjsKICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICB0ZXh0LWRlY29yYXRpb24tY29sb3I6IGdyZWVuOwogIHRleHQtZGVjb3JhdGlvbi10aGlja25lc3M6IDJweCAhaW1wb3J0YW50OwoJQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewoJCWNvbG9yOiBibGFjazsKCX0KfQoJCi53b3JkaW5nIC5yZW1vdmVkIHsKCWJhY2tncm91bmQtY29sb3I6ICNGRjg4ODg7Cgl6LWluZGV4OiA1MDsKCXBhZGRpbmc6IDNweDsKICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsKICB0ZXh0LWRlY29yYXRpb24tY29sb3I6IHJnYmEoMjU1LDAsMCwwLjc1KTsKICB0ZXh0LWRlY29yYXRpb24tdGhpY2tuZXNzOiAycHggIWltcG9ydGFudDsKCUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHsKCQljb2xvcjogYmxhY2s7Cgl9Cn0KCi53b3JkaW5nIGxpLnJlbW92ZWQtYnVsbGV0OjpiZWZvcmUgewoJYmFja2dyb3VuZC1jb2xvcjogI0ZGODg4ODsKCXotaW5kZXg6IDUwOwoJcGFkZGluZzogM3B4OwogIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOwogIHRleHQtZGVjb3JhdGlvbi1jb2xvcjogcmdiYSgyNTUsMCwwLDAuNzUpOwogIHRleHQtZGVjb3JhdGlvbi10aGlja25lc3M6IDJweCAhaW1wb3J0YW50OwoJQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewoJCWNvbG9yOiBibGFjazsKCX0KfQoJCi53b3JkaW5nIC5ub3RlIHsKCWZvbnQtc2l6ZTogMC44ZW07Cn0KCQoud29yZGluZwkrIC53b3JkaW5nIHsKCW1hcmdpbi10b3A6IDAuNWVtOwp9CgkKLndvcmRpbmcgcHJlOmhhcyhjb2RlKSB7Cglib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2RlLWluZm8tY29sb3IpOwoJYm9yZGVyLXJhZGl1czogMDsKCXBhZGRpbmc6IDBlbTsKCXotaW5kZXg6IDE7CglvdmVyZmxvdy14OiBzY3JvbGw7Cn0KCQoud29yZGluZwljb2RlIC5hZGRlZGVkIHNwYW4gewoJY29sb3I6IGJsYWNrICFpbXBvcnRhbnQ7Cn0KCnRhYmxlLnBvbGwgewogIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CiAgbWFyZ2luLXRvcDogMjBweDsKfQoKdGFibGUucG9sbCB0aCwgdGFibGUucG9sbCB0ZCB7CiAgYm9yZGVyOiAwOwogIHBhZGRpbmc6IDVweCAxMHB4OwogIHRleHQtYWxpZ246IGNlbnRlcjsKICBib3JkZXI6IDJweCBzb2xpZCByZ2JhKDEyOCwxMjgsMTI4LDAuMik7Cn0KCnRhYmxlLnBvbGwgdGQ6Zmlyc3QtY2hpbGQsIHRhYmxlLnBvbGwgdGg6Zmlyc3QtY2hpbGQgewogYm9yZGVyLWxlZnQ6IG5vbmU7Cn0KCnRhYmxlLnBvbGwgdGQ6bGFzdC1jaGlsZCwgdGFibGUucG9sbCB0aDpsYXN0LWNoaWxkIHsKIGJvcmRlci1yaWdodDogbm9uZTsKfQoKdGFibGUucG9sbCB0cjpmaXJzdC1jaGlsZCB0aCwgdGFibGUucG9sbCB0cjpmaXJzdC1jaGlsZCB0ZCB7CiAgYm9yZGVyLXRvcDogbm9uZTsKfQoKdGFibGUucG9sbCB0cjpsYXN0LWNoaWxkIHRoLCB0YWJsZS5wb2xsIHRyOmxhc3QtY2hpbGQgdGQgewogIGJvcmRlci1ib3R0b206IG5vbmU7Cn0KCi53b3JkaW5nIC5kZXNjcmlwdGlvbiB7CiAgcGFkZGluZy1ib3R0b206IDFlbTsKfQoKLndvcmRpbmcgLmNhcHMgewogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cn0KCnRhYmxlIHRoLnRhYmxlLWdyb3VwIHsKCW1heC13aWR0aDogMmVtOwp9Cgp0YWJsZSB0aC50YWJsZS1ncm91cCA+IHNwYW4gewoJbWF4LXdpZHRoOiAyZW07CglkaXNwbGF5OiBibG9jazsKCW92ZXJmbG93OiB2aXNpYmxlOwoJdGV4dC1hbGlnbjogY2VudGVyOwoJdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDFlbSk7Cn0KCnRhYmxlIHRoLnRhYmxlLWdyb3VwID4gc3BhbiA+IHNwYW4gewoJZGlzcGxheTogaW5saW5lLWJsb2NrOwoJdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpIHJvdGF0ZSgtOTBkZWcpOwoJd2lkdGg6IGF1dG87Cn0KCnRhYmxlLmJlZm9yZS1hZnRlciB0aCwgdGFibGUuYmVmb3JlLWFmdGVyIHRkICB7CiAgaGVpZ2h0OiAzMHB4Owp9CgoKCnRhYmxlLmJlZm9yZS1hZnRlciAuZ3JlZW4gewogIGNvbG9yOiBncmVlbjsKfQoKdGFibGUuYmVmb3JlLWFmdGVyIC5vcmFuZ2UgewogIGNvbG9yOiBvcmFuZ2U7Cn0KCnRhYmxlLmJlZm9yZS1hZnRlciAucmVkLW5vcm1hbCB7CiAgY29sb3I6IHJlZDsKfQoKdGFibGUuYmVmb3JlLWFmdGVyIC5pbi1wcm9ncmVzcyB7Cgljb2xvcjogYmx1ZTsKCWJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwyMzEsMjU1LDAuNSk7Cn0KCnRhYmxlLmJlZm9yZS1hZnRlciAucHJvcG9zaW5nIHsKCWNvbG9yOiBncmVlbjsKCWJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwyNTUsMCwwLjUpOwp9Cgp0YWJsZS5iZWZvcmUtYWZ0ZXIgLm5vdC1wcm9wb3NpbmcgewoJY29sb3I6IHJlZDsKCWJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LDAsMCwwLjI1KTsKfQoKdGFibGUuYmVmb3JlLWFmdGVyIC5uZXZlci1wcm9wb3NpbmcgewoJY29sb3I6IHJlZDsKCWJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LDAsMCwwLjI1KTsKfQoKdGFibGUuYmVmb3JlLWFmdGVyIC5wcm9wb3NlZC1yZWFkeS1mb3ItZnV0dXJlIHsKCWNvbG9yOiBncmVlbjsKCWJhY2tncm91bmQtY29sb3I6IHJnYmEoMjAzLDIyOSw3LDAuNSk7Cn0KCnRhYmxlLmJlZm9yZS1hZnRlciAucHJvcG9zZWQtcmVhZHktZm9yLWZ1dHVyZTIgewoJY29sb3I6IGdyZWVuOwoJYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsMTk4LDAsMC41KTsKfQoKdGFibGUuYmVmb3JlLWFmdGVyIC5yZWQgewogIGNvbG9yOiByZWQ7CiAgZm9udC1zaXplOiAyNHB4OwogIGxpbmUtaGVpZ2h0OiAxNnB4Owp9Cgp0ZCBhLCB0ZCBhOnZpc2l0ZWQsIHRkIGE6aG92ZXIgewoJY29sb3I6IGluaGVyaXQ7Cn0KCmRpdi53b3JkaW5nLW5vdGUgewogIGJhY2tncm91bmQ6IHJnYih2YXIoLS1tYWluLWJhY2tncm91bmQpKTsKICBib3gtc2hhZG93OiA1cHggMCAxMHB4IHZhcigtLXRoaW4tYm94LXNoYWRvdy1jb2xvcikgaW5zZXQ7CiAgYm9yZGVyLXJhZGl1czogMTVweDsKICBjb2xvcjogdmFyKC0tdGV4dC1jb2xvcik7CiAgcGFkZGluZzogMTBweDsKICBtYXJnaW46IDEwcHggMjBweDsKICBmb250LXNpemU6IDEycHg7Cn0KCi5wYXJudW0gewoJZm9udC1zaXplOiAxMnB4OwoJbWFyZ2luLXJpZ2h0OiAwLjI1ZW07CglkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cn0KCmxpOmhhcyg+IC5wYXJudW0pIHsKCWxpc3Qtc3R5bGUtcG9zaXRpb246IGluc2lkZTsKCXBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKbGkgPiAucGFybnVtIHsKCXBvc2l0aW9uOiBhYnNvbHV0ZTsKCWxlZnQ6IC0zMHB4OwoJYm90dG9tOiAycHg7Cn0KCmRpdi5zdmdpbWcgewoJdGV4dC1hbGlnbjogbGVmdDsKfQoKZGl2LnN2Z2ltZyA+IGRpdiB7CgkKfQoKZGl2LnN2Z2ltZyA+IGRpdiA+IHN2ZyB7Cgp9CgpAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7CglkaXYuc3ZnaW1nID4gZGl2ID4gaW1nIHsKCQlib3JkZXItcmFkaXVzOiAxMHB4OwoJCWZpbHRlcjogZHJvcC1zaGFkb3coMHB4IDBweCA1cHggcmdiKDI1NSAyNTUgMjU1IC8gMC40KSk7Cgl9Cn0KCnRhYmxlLmJlZm9yZS1hZnRlciB0ZC5kaXNhYmxlLWJvdHRvbSwgdGFibGUuYmVmb3JlLWFmdGVyIHRoLmRpc2FibGUtYm90dG9tIHsKCWJvcmRlci1ib3R0b206IG5vbmU7Cn0KdGFibGUuYmVmb3JlLWFmdGVyIHRoLmxlZnQsIHRhYmxlLmJlZm9yZS1hZnRlciB0ZC5sZWZ0IHsKCXRleHQtYWxpZ246IGxlZnQ7Cn0KCnRkIGEubm90ZTphZnRlciB7Cgl2ZXJ0aWNhbC1hbGlnbjogc3VwZXI7Cglmb250LXNpemU6IDc1JTsKCW1hcmdpbi1sZWZ0OiAwLjVlbTsKfQoKdGQgYS5ub3RlLm4xOmFmdGVyIHsKCWNvbnRlbnQ6ICIxIjsKfQoKdGQgYS5ub3RlLm4yOmFmdGVyIHsKCWNvbnRlbnQ6ICIyIjsKfQoKdGQgYS5ub3RlLm4zOmFmdGVyIHsKCWNvbnRlbnQ6ICIzIjsKfQoKdGQgYS5ub3RlLm40OmFmdGVyIHsKCWNvbnRlbnQ6ICI0IjsKfQoKdGQgYS5ub3RlLm41OmFmdGVyIHsKCWNvbnRlbnQ6ICI1IjsKfQoKYmxvY2txdW90ZSB7CgliYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMTApOwoJZm9udC1zdHlsZTogaXRhbGljOwoJcGFkZGluZzogMC4wNWVtIDFlbTsKCW1hcmdpbjogMDsKCWJvcmRlci1sZWZ0OiByZ2JhKDAsMCwwLDAuNSkgNXB4IHNvbGlkOwp9Cgoud29yZGluZyBwcmUgY29kZSBlbSwgLndvcmRpbmcgcHJlIGNvZGUgZW0gc3BhbiB7Cgljb2xvcjogdmFyKC0tdGV4dC1jb2xvcikgIWltcG9ydGFudDsKfQ==">
<link rel="stylesheet" href="data:text/css;base64,QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogbGlnaHQpIHsKCnByZSBjb2RlLmhsanMgewoKfQpjb2RlLmhsanMgewoKfQovKgoKWENvZGUgc3R5bGUgKGMpIEFuZ2VsIEdhcmNpYSA8YW5nZWxnYXJjaWEubWFpbEBnbWFpbC5jb20+CgoqLwouaGxqcyB7CiAgY29sb3I6IGluaGVyaXQKfQovKiBHcmF5IERPQ1RZUEUgc2VsZWN0b3JzIGxpa2UgV2ViS2l0ICovCi54bWwgLmhsanMtbWV0YSB7CiAgY29sb3I6ICNjMGMwYzAKfQouaGxqcy1jb21tZW50LAouaGxqcy1xdW90ZSB7CiAgY29sb3I6ICMwMDc0MDAKfQouaGxqcy10YWcsCi5obGpzLWF0dHJpYnV0ZSwKLmhsanMta2V5d29yZCwKLmhsanMtc2VsZWN0b3ItdGFnLAouaGxqcy1saXRlcmFsLAouaGxqcy1uYW1lIHsKICBjb2xvcjogI2FhMGQ5MQp9Ci5obGpzLXZhcmlhYmxlLAouaGxqcy10ZW1wbGF0ZS12YXJpYWJsZSB7CiAgY29sb3I6ICMzRjZFNzQKfQouaGxqcy1jb2RlLAouaGxqcy1zdHJpbmcsCi5obGpzLW1ldGEgLmhsanMtc3RyaW5nIHsKICBjb2xvcjogI2M0MWExNgp9Ci5obGpzLXJlZ2V4cCwKLmhsanMtbGluayB7CiAgY29sb3I6ICMwRTBFRkYKfQouaGxqcy10aXRsZSwKLmhsanMtc3ltYm9sLAouaGxqcy1idWxsZXQsCi5obGpzLW51bWJlciB7CiAgY29sb3I6ICMxYzAwY2YKfQouaGxqcy1zZWN0aW9uLAouaGxqcy1tZXRhIHsKICBjb2xvcjogIzY0MzgyMAp9Ci5obGpzLXRpdGxlLmNsYXNzXywKLmhsanMtY2xhc3MgLmhsanMtdGl0bGUsCi5obGpzLXR5cGUsCi5obGpzLWJ1aWx0X2luLAouaGxqcy1wYXJhbXMgewogIGNvbG9yOiAjNWMyNjk5Cn0KLmhsanMtYXR0ciB7CiAgY29sb3I6ICM4MzZDMjgKfQouaGxqcy1zdWJzdCB7CiAgY29sb3I6ICMwMDAKfQouaGxqcy1mb3JtdWxhIHsKICBmb250LXN0eWxlOiBpdGFsaWMKfQouaGxqcy1hZGRpdGlvbiB7Cgp9Ci5obGpzLWRlbGV0aW9uIHsKCn0KLmhsanMtc2VsZWN0b3ItaWQsCi5obGpzLXNlbGVjdG9yLWNsYXNzIHsKICBjb2xvcjogIzliNzAzZgp9Ci5obGpzLWRvY3RhZywKLmhsanMtc3Ryb25nIHsKICBmb250LXdlaWdodDogYm9sZAp9Ci5obGpzLWVtcGhhc2lzIHsKICBmb250LXN0eWxlOiBpdGFsaWMKfQoKfQoKQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewoKcHJlIGNvZGUuaGxqcyB7Cgp9CmNvZGUuaGxqcyB7Cgp9Ci8qCgpYQ29kZSBzdHlsZSAoYykgQW5nZWwgR2FyY2lhIDxhbmdlbGdhcmNpYS5tYWlsQGdtYWlsLmNvbT4KCiovCi5obGpzIHsKICBjb2xvcjogaW5oZXJpdAp9Ci8qIEdyYXkgRE9DVFlQRSBzZWxlY3RvcnMgbGlrZSBXZWJLaXQgKi8KLnhtbCAuaGxqcy1tZXRhIHsKICBjb2xvcjogI2MwYzBjMAp9Ci5obGpzLWNvbW1lbnQsCi5obGpzLXF1b3RlIHsKICBjb2xvcjogIzAwNzQwMAp9Ci5obGpzLXRhZywKLmhsanMtYXR0cmlidXRlLAouaGxqcy1rZXl3b3JkLAouaGxqcy1zZWxlY3Rvci10YWcsCi5obGpzLWxpdGVyYWwsCi5obGpzLW5hbWUgewogIGNvbG9yOiAjYWEwZDkxCn0KLmhsanMtdmFyaWFibGUsCi5obGpzLXRlbXBsYXRlLXZhcmlhYmxlIHsKICBjb2xvcjogIzNGNkU3NAp9Ci5obGpzLWNvZGUsCi5obGpzLXN0cmluZywKLmhsanMtbWV0YSAuaGxqcy1zdHJpbmcgewogIGNvbG9yOiAjYzQxYTE2Cn0KLmhsanMtcmVnZXhwLAouaGxqcy1saW5rIHsKICBjb2xvcjogIzBFMEVGRgp9Ci5obGpzLXRpdGxlLAouaGxqcy1zeW1ib2wsCi5obGpzLWJ1bGxldCwKLmhsanMtbnVtYmVyIHsKICBjb2xvcjogIzkzODJmZgp9Ci5obGpzLXNlY3Rpb24sCi5obGpzLW1ldGEgewogIGNvbG9yOiAjNjQzODIwCn0KLmhsanMtdGl0bGUuY2xhc3NfLAouaGxqcy1jbGFzcyAuaGxqcy10aXRsZSwKLmhsanMtdHlwZSwKLmhsanMtYnVpbHRfaW4sCi5obGpzLXBhcmFtcyB7CiAgY29sb3I6ICNiODc5ZmYKfQouaGxqcy1hdHRyIHsKICBjb2xvcjogIzgzNkMyOAp9Ci5obGpzLXN1YnN0IHsKICBjb2xvcjogIzAwMAp9Ci5obGpzLWZvcm11bGEgewogIGZvbnQtc3R5bGU6IGl0YWxpYwp9Ci5obGpzLWFkZGl0aW9uIHsKCn0KLmhsanMtZGVsZXRpb24gewoKfQouaGxqcy1zZWxlY3Rvci1pZCwKLmhsanMtc2VsZWN0b3ItY2xhc3MgewogIGNvbG9yOiAjOWI3MDNmCn0KLmhsanMtZG9jdGFnLAouaGxqcy1zdHJvbmcgewogIGZvbnQtd2VpZ2h0OiBib2xkCn0KLmhsanMtZW1waGFzaXMgewogIGZvbnQtc3R5bGU6IGl0YWxpYwp9Cgp9CgoK">
<link rel="stylesheet" href="data:text/css;base64,LndvcmRpbmcgIHsKICAgIGZvbnQtZmFtaWx5OiAnTm90byBTZXJpZic7CiAgICBoeXBoZW5zOiBhdXRvOwogICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgIGZvbnQtc2l6ZTogMTBwdDsKICAgIHBhZGRpbmctbGVmdDogM2VtOwp9Cgoud29yZGluZyBkaXYgewogICAgYmFja2dyb3VuZDogaW5oZXJpdDsKfQoKLndvcmRpbmcgZGl2LndyYXBwZXIgewogICAgbWF4LXdpZHRoOiAyMGNtOwogICAgbWFyZ2luOiBhdXRvOwp9Cgoud29yZGluZyBkaXYudGV4cGFyYSB7CiAgICBtYXJnaW4tdG9wOiAzcHQ7CiAgICBtYXJnaW4tYm90dG9tOiAzcHQ7Cn0KCi53b3JkaW5nIHRhYmxlIGRpdi50ZXhwYXJhIHsKICAgIG1hcmdpbi10b3A6IDA7CiAgICBtYXJnaW4tYm90dG9tOiAwOwp9Cgoud29yZGluZyB0YWJsZS5lbnVtZXJhdGUgZGl2LnRleHBhcmEgewogICAgbWFyZ2luLXRvcDogM3B0OwogICAgbWFyZ2luLWJvdHRvbTogM3B0Owp9Cgoud29yZGluZyB1bCB7CiAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7CiAgICBwYWRkaW5nLWxlZnQ6IDltbTsKICAgIG1hcmdpbi10b3A6IDA7CiAgICBtYXJnaW4tYm90dG9tOiAwOwp9Cgoud29yZGluZyBvbCB7CiAgICBtYXJnaW4tdG9wOiAwOwogICAgbWFyZ2luLWJvdHRvbTogMDsKfQoKLndvcmRpbmcgYSB7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KCi53b3JkaW5nIGEuaGlkZGVuX2xpbmsgewogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgY29sb3I6IGluaGVyaXQ7Cn0KCi53b3JkaW5nIGxpIHsKICAgIG1hcmdpbi10b3A6IDNwdDsKICAgIG1hcmdpbi1ib3R0b206IDNwdDsKfQoKLndvcmRpbmcgaDEgewogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBtYXJnaW4tdG9wOiAxMHB0OwogICAgbWFyZ2luLWJvdHRvbTogMTBwdDsKfQoKLndvcmRpbmcgaDIgewogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBmb250LXNpemU6IDE0cHQ7CiAgICBtYXJnaW4tdG9wOiAxMHB0OwogICAgbWFyZ2luLWJvdHRvbTogMTBwdDsKfQoKLndvcmRpbmcgaDI6OmFmdGVyIHsKICAgIGNvbnRlbnQ6ICIiOwogICAgY2xlYXI6IGJvdGg7CiAgICBkaXNwbGF5OiB0YWJsZTsKfQoKLndvcmRpbmcgaDMgewogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBtYXJnaW4tdG9wOiAxMHB0OwogICAgbWFyZ2luLWJvdHRvbTogMTBwdDsKfQoKLndvcmRpbmcgaDM6OmFmdGVyIHsKICAgIGNvbnRlbnQ6ICIiOwogICAgY2xlYXI6IGJvdGg7CiAgICBkaXNwbGF5OiB0YWJsZTsKfQoKLndvcmRpbmcgaDQgewogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBtYXJnaW4tdG9wOiAxMHB0OwogICAgbWFyZ2luLWJvdHRvbTogMTBwdDsKfQoKLndvcmRpbmcgaDQ6OmFmdGVyIHsKICAgIGNvbnRlbnQ6ICIiOwogICAgY2xlYXI6IGJvdGg7CiAgICBkaXNwbGF5OiB0YWJsZTsKfQoKLndvcmRpbmcgdWwgPiBsaTpiZWZvcmUgewogICAgY29udGVudDogIlwyMDE0IjsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIG1hcmdpbi1sZWZ0OiAtMS41ZW07Cn0KCi53b3JkaW5nIC5zaHk6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICJcMDBhZCI7CiAgICAvKiBUaGlzIGlzIFUrMDBBRCBTT0ZUIEhZUEhFTiwgc2FtZSBhcyAmc2h5LCBidXQgd2UgcHV0IGl0IGluIDpiZWZvcmUKICAgIAl0byBzdG9wIGl0IGZyb20gYmVpbmcgaW5jbHVkZWQgd2hlbiB0aGUgdGV4dCBpcyBjb3BpZWQgdG8gdGhlIGNsaXBib2FyZAogICAgCXdpdGggRmlyZWZveCwgd2hpY2ggaXMgZXNwZWNpYWxseSBhbm5veWluZyB3aGVuIGNvcHlpbmcgdG8gYSB0ZXJtaW5hbCwKICAgIAl3aGVyZSB0aGUgaHlwaGVuIGNoYXJhY3RlcnMgd2lsbCBzaG93IHVwLiAqLwp9CgoKLndvcmRpbmcgLmFiYnJfcmVmIHsKICAgIGZsb2F0OiByaWdodDsKfQoKLndvcmRpbmcgLmZvbGRlZF9hYmJyX3JlZiB7CiAgICBmbG9hdDogcmlnaHQ7Cn0KCi53b3JkaW5nIC51bmZvbGRlZF9hYmJyX3JlZiB7CiAgICBkaXNwbGF5OiBub25lOwp9Cgoud29yZGluZyAuc2VjbnVtIHsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIG1pbi13aWR0aDogMzVwdDsKfQoKLndvcmRpbmcgLmFubmV4bnVtIHsKICAgIGRpc3BsYXk6IGJsb2NrOwp9Cgoud29yZGluZyBkaXYuc291cmNlTGlua1BhcmVudCB7CiAgICBmbG9hdDogcmlnaHQ7Cn0KCi53b3JkaW5nIGEuc291cmNlTGluayB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBvcGFjaXR5OiAwOwogICAgbWFyZ2luLWxlZnQ6IDEwcHQ7Cn0KCi53b3JkaW5nIGEuc291cmNlTGluazpob3ZlciB7CiAgICBvcGFjaXR5OiAxOwp9Cgoud29yZGluZyBhLml0ZW1EZWNsTGluayB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBmb250LXNpemU6IDc1JTsKICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgd2lkdGg6IDVlbTsKICAgIG9wYWNpdHk6IDA7Cn0KCi53b3JkaW5nIGEuaXRlbURlY2xMaW5rOmhvdmVyIHsKICAgIG9wYWNpdHk6IDE7Cn0KCi53b3JkaW5nIGRpdi5tYXJnaW5hbGl6ZWRwYXJlbnQgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbGVmdDogLTE4bW07Cn0KCi53b3JkaW5nIGEubWFyZ2luYWxpemVkIHsKICAgIHdpZHRoOiAxNW1tOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgZm9udC1zaXplOiA3cHQ7CiAgICB0ZXh0LWFsaWduOiByaWdodDsKfQoKLndvcmRpbmcgYS5lbnVtZXJhdGVkX2l0ZW1fbnVtIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgbWFyZ2luLXRvcDogM3B0OwogICAgbWFyZ2luLWJvdHRvbTogM3B0OwogICAgbWFyZ2luLXJpZ2h0OiA2cHQ7Cn0KCi53b3JkaW5nIGRpdi5wYXJhIHsKICAgIG1hcmdpbi1ib3R0b206IDZwdDsKICAgIG1hcmdpbi10b3A6IDZwdDsKICAgIHRleHQtYWxpZ246IGp1c3RpZnk7CiAgICBtaW4taGVpZ2h0OiAxLjJlbTsKfQoKLndvcmRpbmcgZGl2LnNlY3Rpb24gewogICAgdGV4dC1hbGlnbjoganVzdGlmeTsKfQoKLndvcmRpbmcgZGl2LnNlbnRlbmNlIHsKICAgIGRpc3BsYXk6IGlubGluZTsKfQoKLndvcmRpbmcgYS5pbmRleCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBmbG9hdDogcmlnaHQ7CiAgICByaWdodDogLTFlbTsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi53b3JkaW5nIGEuaW5kZXg6YmVmb3JlIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGNvbnRlbnQ6ICLin7UiOwogICAgYmFja2dyb3VuZC1jb2xvcjogI0M5RkJDOTsKfQoKCi53b3JkaW5nIC5pbmRleGl0ZW1zIHsKICAgIG1hcmdpbi1sZWZ0OiAyZW07CiAgICB0ZXh0LWluZGVudDogLTJlbTsKfQoKLndvcmRpbmcgZGl2Lml0ZW1kZXNjciB7CiAgICBtYXJnaW4tbGVmdDogMTJtbTsKfQoKLndvcmRpbmcgLmJuZiB7CiAgICBmb250LWZhbWlseTogJ05vdG8gU2Fucyc7CiAgICBmb250LXNpemU6IDEwcHQ7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICBtYXJnaW4tbGVmdDogMjVwdDsKICAgIG1hcmdpbi10b3A6IDAuNWVtOwogICAgbWFyZ2luLWJvdHRvbTogMC41ZW07CiAgICB0ZXh0LWluZGVudDogLTNlbTsKICAgIHBhZGRpbmctbGVmdDogM2VtOwogICAgbGluZS1oZWlnaHQ6IDEuNTsKfQoKLndvcmRpbmcgZGl2LmJuZiBzcGFuLnRleHR0dCB7CiAgICBmb250LWZhbWlseTogJ05vdG8gU2FucyBNb25vJzsKICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsKfQoKLndvcmRpbmcgLnJlYm5mIHsKICAgIGZvbnQtZmFtaWx5OiAnTm90byBTZXJpZic7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICBtYXJnaW4tdG9wOiAwLjVlbTsKICAgIG1hcmdpbi1ib3R0b206IDAuNWVtOwogICAgbWFyZ2luLWxlZnQ6IDMwcHQ7CiAgICB0ZXh0LWluZGVudDogLTNlbTsKICAgIHBhZGRpbmctbGVmdDogM2VtOwogICAgbGluZS1oZWlnaHQ6IDEuNTsKfQoKLndvcmRpbmcgLnNpbXBsZWJuZiB7CiAgICBmb250LWZhbWlseTogJ05vdG8gU2VyaWYnOwogICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgZm9udC1zaXplOiAxMHB0OwogICAgbWFyZ2luLXRvcDogMC41ZW07CiAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTsKICAgIG1hcmdpbi1sZWZ0OiAzMHB0OwogICAgbGluZS1oZWlnaHQ6IDEuNTsKfQoKLndvcmRpbmcgc3Bhbi50ZXh0bm9ybWFsIHsKICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsKICAgIGZvbnQtZmFtaWx5OiAnTm90byBTZXJpZic7CiAgICBmb250LXNpemU6IDEwcHQ7CiAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwp9Cgoud29yZGluZyAuYm5mIHNwYW4udGV4dG5vcm1hbCB7CiAgICBmb250LXN0eWxlOiBub3JtYWw7CiAgICBmb250LWZhbWlseTogJ05vdG8gU2VyaWYnOwogICAgZm9udC1zaXplOiAxMHB0OwogICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKfQoKLndvcmRpbmcgcCB7CiAgICBtYXJnaW4tdG9wOiA0cHQ7CiAgICBtYXJnaW4tYm90dG9tOiA0cHQ7Cn0KCi53b3JkaW5nIHNwYW4ucmxhcCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB3aWR0aDogMHB4OwogICAgdGV4dC1pbmRlbnQ6IDA7Cn0KCi53b3JkaW5nIHNwYW4udGVybWluYWwgewogICAgZm9udC1mYW1pbHk6ICdOb3RvIFNhbnMgTW9ubyc7CiAgICBmb250LXN0eWxlOiBub3JtYWw7CiAgICBmb250LXNpemU6IDlwdDsKICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKfQoKLndvcmRpbmcgc3Bhbi5ub25jeHh0ZXJtaW5hbCB7CiAgICBmb250LWZhbWlseTogJ05vdG8gU2FucyBNb25vJzsKICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsKICAgIGZvbnQtc2l6ZTogOXB0Owp9Cgoud29yZGluZyBzcGFuLnRlcm0gewogICAgZm9udC1zdHlsZTogaXRhbGljOwp9Cgoud29yZGluZyBzcGFuLnRjb2RlIHsKICAgIGZvbnQtZmFtaWx5OiAnTm90byBTYW5zIE1vbm8nOwogICAgZm9udC1zdHlsZTogbm9ybWFsOwp9Cgoud29yZGluZyBzcGFuLnRleHRiZiB7CiAgICBmb250LXdlaWdodDogYm9sZDsKfQoKLndvcmRpbmcgc3Bhbi50ZXh0c2YgewogICAgZm9udC1mYW1pbHk6ICdOb3RvIFNhbnMnOwogICAgZm9udC1zaXplOiAxMHB0Owp9Cgoud29yZGluZyBkaXYuZm9vdG5vdGUgc3Bhbi50ZXh0c2YgewogICAgZm9udC1mYW1pbHk6ICdOb3RvIFNhbnMnOwogICAgZm9udC1zaXplOiA4cHQ7Cn0KCi53b3JkaW5nIC5ibmYgc3Bhbi50ZXh0c2YgewogICAgZm9udC1mYW1pbHk6ICdOb3RvIFNhbnMnOwogICAgZm9udC1zaXplOiAxMHB0Owp9Cgoud29yZGluZyAuc2ltcGxlYm5mIHNwYW4udGV4dHNmIHsKICAgIGZvbnQtZmFtaWx5OiAnTm90byBTYW5zJzsKICAgIGZvbnQtc2l6ZTogMTBwdDsKfQoKLndvcmRpbmcgLmV4YW1wbGUgc3Bhbi50ZXh0c2YgewogICAgZm9udC1mYW1pbHk6ICdOb3RvIFNhbnMnOwogICAgZm9udC1zaXplOiAxMHB0Owp9Cgoud29yZGluZyBzcGFuLnRleHRzYyB7CiAgICBmb250LXZhcmlhbnQ6IHNtYWxsLWNhcHM7Cn0KCi53b3JkaW5nIHNwYW4ubm9udGVybWRlZiB7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICBmb250LWZhbWlseTogJ05vdG8gU2Fucyc7CiAgICBmb250LXNpemU6IDEwcHQ7Cn0KCi53b3JkaW5nIC5yZWJuZiBhLm5vbnRlcm1kZWYgewogICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgZm9udC1mYW1pbHk6ICdOb3RvIFNlcmlmJzsKfQoKLndvcmRpbmcgc3Bhbi5lbXBoIHsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKfQoKLndvcmRpbmcgc3Bhbi50ZWNodGVybSB7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7Cn0KCi53b3JkaW5nIHNwYW4ubWF0aGl0IHsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKfQoKLndvcmRpbmcgc3Bhbi5tYXRoc2YgewogICAgZm9udC1mYW1pbHk6ICdOb3RvIFNhbnMnOwp9Cgoud29yZGluZyBzcGFuLm1hdGhybSB7CiAgICBmb250LWZhbWlseTogJ05vdG8gU2VyaWYnOwogICAgZm9udC1zdHlsZTogbm9ybWFsOwp9Cgoud29yZGluZyBzcGFuLnRleHRybSB7CiAgICBmb250LWZhbWlseTogJ05vdG8gU2VyaWYnOwogICAgZm9udC1zaXplOiAxMHB0Owp9Cgoud29yZGluZyBzcGFuLnRleHRzbCB7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7Cn0KCi53b3JkaW5nIHNwYW4ubWF0aHR0IHsKICAgIGZvbnQtZmFtaWx5OiAnTm90byBTYW5zIE1vbm8nOwogICAgZm9udC1zdHlsZTogbm9ybWFsOwp9Cgoud29yZGluZyBzcGFuLm1ib3ggewogICAgZm9udC1mYW1pbHk6ICdOb3RvIFNlcmlmJzsKICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsKfQoKLndvcmRpbmcgc3Bhbi51bmdhcCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB3aWR0aDogMnB0Owp9Cgoud29yZGluZyBzcGFuLnRleHR0dCB7CiAgICBmb250LWZhbWlseTogJ05vdG8gU2FucyBNb25vJzsKfQoKLndvcmRpbmcgc3Bhbi50ZXh0aXQgewogICAgZm9udC1zdHlsZTogaXRhbGljOwp9Cgoud29yZGluZyBkaXYuZm9vdG5vdGUgc3Bhbi50ZXh0dHQgewogICAgZm9udC1mYW1pbHk6ICdOb3RvIFNhbnMgTW9ubyc7Cn0KCi53b3JkaW5nIHNwYW4udGNvZGVfaW5fY29kZWJsb2NrIHsKICAgIGZvbnQtZmFtaWx5OiAnTm90byBTYW5zIE1vbm8nOwogICAgZm9udC1zdHlsZTogbm9ybWFsOwogICAgZm9udC1zaXplOiA5cHQ7Cn0KCi53b3JkaW5nIHNwYW4ucGhhbnRvbSB7CiAgICBjb2xvcjogd2hpdGU7Cn0KLyogVW5mb3J0dW5hdGVseSwgdGhpcyB3YXkgdGhlIHRleHQgaXMgc3RpbGwgc2VsZWN0YWJsZS4gQW5vdGhlcgoJb3B0aW9uIGlzIGRpc3BsYXk6bm9uZSwgYnV0IHRoZW4gd2UgbG9zZSB0aGUgbmljZSBsYXlvdXQuCglUb2RvOiBmaW5kIHByb3BlciBzb2x1dGlvbi4gKi8KCi53b3JkaW5nIHNwYW4ubWF0aCB7CiAgICBmb250LXN0eWxlOiBub3JtYWw7CiAgICBmb250LWZhbWlseTogJ05vdG8gU2VyaWYnOwogICAgZm9udC1zaXplOiAxMHB0Owp9Cgoud29yZGluZyBzcGFuLm1hdGhibG9jayB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgbWFyZ2luLXJpZ2h0OiBhdXRvOwogICAgbWFyZ2luLXRvcDogMS4yZW07CiAgICBtYXJnaW4tYm90dG9tOiAxLjJlbTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKLndvcmRpbmcgc3Bhbi5tYXRoYWxwaGEgewogICAgZm9udC1zdHlsZTogaXRhbGljOwp9Cgoud29yZGluZyBzcGFuLnN5bm9wc2lzIHsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgbWFyZ2luLXRvcDogMC41ZW07CiAgICBkaXNwbGF5OiBibG9jazsKfQoKLndvcmRpbmcgc3Bhbi5kZWZpbml0aW9uIHsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZGlzcGxheTogYmxvY2s7Cn0KCi53b3JkaW5nIC5jb2RlYmxvY2sgewogICAgZm9udC1mYW1pbHk6ICdOb3RvIFNhbnMgTW9ubyc7CiAgICBtYXJnaW4tbGVmdDogMS4yZW07CiAgICBsaW5lLWhlaWdodDogMS41OwogICAgZm9udC1zaXplOiA5cHQ7CiAgICB3aGl0ZS1zcGFjZTogcHJlOwogICAgZGlzcGxheTogYmxvY2s7CiAgICBtYXJnaW4tdG9wOiAzcHQ7CiAgICBtYXJnaW4tYm90dG9tOiAzcHQ7CgkJb3ZlcmZsb3cteDogdmlzaWJsZTsKCQlvdmVyZmxvdy15OiBkZWZhdWx0Owp9Cgoud29yZGluZyB0YWJsZSAuY29kZWJsb2NrIHsKICAgIG1hcmdpbi1yaWdodDogMDsKfQoKLndvcmRpbmcgLm91dHB1dGJsb2NrIHsKICAgIG1hcmdpbi1sZWZ0OiAxLjJlbTsKICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICBmb250LWZhbWlseTogJ05vdG8gU2FucyBNb25vJzsKICAgIGZvbnQtc2l6ZTogOXB0Owp9Cgoud29yZGluZyBjb2RlIHsKICAgIGZvbnQtZmFtaWx5OiAnTm90byBTYW5zIE1vbm8nOwogICAgZm9udC1zdHlsZTogbm9ybWFsOwp9Cgoud29yZGluZyBkaXYuaXRlbWRlY2wgewogICAgbWFyZ2luLXRvcDogMmV4Owp9Cgoud29yZGluZyBjb2RlLml0ZW1kZWNsY29kZSB7CiAgICB3aGl0ZS1zcGFjZTogcHJlOwogICAgZm9udC1mYW1pbHk6ICdOb3RvIFNhbnMgTW9ubyc7CiAgICBmb250LXNpemU6IDlwdDsKICAgIGRpc3BsYXk6IGJsb2NrOwoJCW92ZXJmbG93LXg6IHZpc2libGU7CgkJb3ZlcmZsb3cteTogZGVmYXVsdDsKfQoKLndvcmRpbmcgLmNvbW1lbnQgewogICAgY29sb3I6IGdyZWVuOwogICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgZm9udC1mYW1pbHk6ICdOb3RvIFNlcmlmJzsKICAgIGZvbnQtc2l6ZTogMTBwdDsKfQoKLndvcmRpbmcgLmZvb3Rub3RlIC5jb21tZW50IHsKICAgIGNvbG9yOiBncmVlbjsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgIGZvbnQtZmFtaWx5OiAnTm90byBTZXJpZic7CiAgICBmb250LXNpemU6IDhwdDsKfQoKLndvcmRpbmcgLmV4YW1wbGUgLmNvbW1lbnQgewogICAgY29sb3I6IGdyZWVuOwogICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgZm9udC1mYW1pbHk6ICdOb3RvIFNlcmlmJzsKICAgIGZvbnQtc2l6ZTogOXB0Owp9Cgoud29yZGluZyAubm90ZSAuY29tbWVudCB7CiAgICBjb2xvcjogZ3JlZW47CiAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICBmb250LWZhbWlseTogJ05vdG8gU2VyaWYnOwogICAgZm9udC1zaXplOiA5cHQ7Cn0KCi53b3JkaW5nIHNwYW4ua2V5d29yZCB7CiAgICBjb2xvcjogIzAwNjA3YzsKICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsKfQoKLndvcmRpbmcgc3Bhbi5wYXJlbnRoZXNpcyB7CiAgICBjb2xvcjogI2FmMTkxNTsKfQoKLndvcmRpbmcgc3Bhbi5jdXJseWJyYWNrZXQgewogICAgY29sb3I6ICNhZjE5MTU7Cn0KCi53b3JkaW5nIHNwYW4uc3F1YXJlYnJhY2tldCB7CiAgICBjb2xvcjogI2FmMTkxNTsKfQoKLndvcmRpbmcgc3Bhbi5saXRlcmFsIHsKICAgIGNvbG9yOiAjOUY2ODA3Owp9Cgoud29yZGluZyBzcGFuLmxpdGVyYWx0ZXJtaW5hbCB7CiAgICBjb2xvcjogIzlGNjgwNzsKICAgIGZvbnQtZmFtaWx5OiAnTm90byBTYW5zIE1vbm8nOwogICAgZm9udC1zdHlsZTogbm9ybWFsOwp9Cgoud29yZGluZyBzcGFuLm9wZXJhdG9yIHsKICAgIGNvbG9yOiAjNTcwMDU3Owp9Cgoud29yZGluZyBzcGFuLmFuZ2xlYnJhY2tldCB7CiAgICBjb2xvcjogIzU3MDA1NzsKfQoKLndvcmRpbmcgc3Bhbi5wcmVwcm9jZXNzb3JkaXJlY3RpdmUgewogICAgY29sb3I6ICM2RjRFMzc7Cn0KCi53b3JkaW5nIHNwYW4udGV4dHN1cGVyc2NyaXB0IHsKICAgIHZlcnRpY2FsLWFsaWduOiBzdXBlcjsKICAgIGZvbnQtc2l6ZTogc21hbGxlcjsKICAgIGxpbmUtaGVpZ2h0OiAwOwp9Cgoud29yZGluZyAuZm9vdG5vdGVyZWYgewogICAgdmVydGljYWwtYWxpZ246IHN1cGVyOwogICAgZm9udC1zaXplOiBzbWFsbGVyOwogICAgbGluZS1oZWlnaHQ6IDA7Cn0KCi53b3JkaW5nIC5mb290bm90ZSB7CiAgICBmb250LXNpemU6IDhwdDsKfQoKLndvcmRpbmcgLmZvb3Rub3RlIC5tYXRoIHsKICAgIGZvbnQtc2l6ZTogOHB0Owp9Cgoud29yZGluZyAuZm9vdG5vdGVudW0gewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICBtYXJnaW4tcmlnaHQ6IDFtbTsKICAgIHdpZHRoOiA0Y2g7Cn0KCi53b3JkaW5nIC5mb290bm90ZUJhY2tsaW5rIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi53b3JkaW5nIC5mb290bm90ZVNlcGFyYXRvciB7CiAgICBiYWNrZ3JvdW5kOiBibGFjazsKICAgIG1hcmdpbi10b3A6IDVtbTsKICAgIGhlaWdodDogMXB4OwogICAgd2lkdGg6IDZjbTsKfQoKLndvcmRpbmcgZGl2Lm1pbmlwYWdlIHsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIG1hcmdpbi1yaWdodDogM2VtOwp9Cgoud29yZGluZyBkaXYubnVtYmVyZWRUYWJsZSB7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBtYXJnaW4tbGVmdDogMWVtOwogICAgbWFyZ2luLXJpZ2h0OiAxZW07CiAgICBtYXJnaW4tYm90dG9tOiAxMnB0OwogICAgbWFyZ2luLXRvcDogOHB0Owp9Cgoud29yZGluZyBkaXYuZmlndXJlIHsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIG1hcmdpbi1sZWZ0OiAyZW07CiAgICBtYXJnaW4tcmlnaHQ6IDJlbTsKICAgIG1hcmdpbi1ib3R0b206IDEycHQ7CiAgICBtYXJnaW4tdG9wOiAzcHQ7Cn0KCi53b3JkaW5nIHRhYmxlIHsKICAgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOwogICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgbWFyZ2luLXJpZ2h0OiBhdXRvOwogICAgbWFyZ2luLXRvcDogN3B0OwogICAgdGV4dC1hbGlnbjogbGVmdDsKfQoKLndvcmRpbmcgdGQsIC53b3JkaW5nIHRoIHsKICAgIHBhZGRpbmctbGVmdDogOHB0OwogICAgcGFkZGluZy1yaWdodDogOHB0OwogICAgdmVydGljYWwtYWxpZ246IHRvcDsKfQoKLndvcmRpbmcgdGQuZW1wdHkgewogICAgcGFkZGluZzogMHB4OwogICAgcGFkZGluZy1sZWZ0OiAxcHg7Cn0KCi53b3JkaW5nIHRkLmxlZnQgewogICAgdGV4dC1hbGlnbjogbGVmdDsKfQoKLndvcmRpbmcgdGQuaGlkZGVuIHsKICAgIHBhZGRpbmc6IDA7CiAgICB3aWR0aDogMDsKfQoKLndvcmRpbmcgdGQucmlnaHQgewogICAgdGV4dC1hbGlnbjogcmlnaHQ7Cn0KCi53b3JkaW5nIHRkLmNlbnRlciB7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCi53b3JkaW5nIHRkLmp1c3RpZnkgewogICAgdGV4dC1hbGlnbjoganVzdGlmeTsKfQoKLndvcmRpbmcgdGQuYm9yZGVyIHsKICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgYmxhY2s7Cn0KCi53b3JkaW5nIHRyLnJvd3NlcCwgLndvcmRpbmcgdGQuY2xpbmUgewogICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOwp9Cgoud29yZGluZyB0ci5jYXBzZXAgewogICAgYm9yZGVyLXRvcDogM3B4IHNvbGlkIGJsYWNrOwogICAgYm9yZGVyLXRvcC1zdHlsZTogZG91YmxlOwp9Cgoud29yZGluZyB0aCB7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7Cn0KCi53b3JkaW5nIHNwYW4uY2VudHJ5IHsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwp9Cgoud29yZGluZyBkaXYudGFibGUgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgIG1hcmdpbi1yaWdodDogYXV0bzsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIHdpZHRoOiA5MCU7Cn0KCi53b3JkaW5nIHNwYW4uaW5kZW50ZWQgewogICAgYmFja2dyb3VuZDogaW5oZXJpdDsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgbWFyZ2luLWxlZnQ6IDJlbTsKICAgIG1hcmdpbi1ib3R0b206IDFlbTsKICAgIG1hcmdpbi10b3A6IDFlbTsKfQoKLndvcmRpbmcgc3Bhbi51cHBlcmNhc2UgewogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKfQoKLndvcmRpbmcgc3Bhbi51Y29kZSB7CiAgICBmb250LXZhcmlhbnQ6IHNtYWxsLWNhcHM7CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgZm9udC1zaXplOiA5MCU7Cn0KCi53b3JkaW5nIHNwYW4udW5hbWUgewogICAgZm9udC12YXJpYW50OiBzbWFsbC1jYXBzOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIGZvbnQtc2l6ZTogOTAlOwp9Cgoud29yZGluZyB0YWJsZS5lbnVtZXJhdGUgewogICAgYm9yZGVyOiAwOwogICAgbWFyZ2luOiAwOwp9Cgoud29yZGluZyB0YWJsZS5lbnVtZXJhdGUgdGQgewogICAgcGFkZGluZzogMDsKfQoKLndvcmRpbmcgdGFibGUuZW51bWVyYXRlIHRkOmZpcnN0LWNoaWxkIHsKICAgIHdpZHRoOiAxY207CiAgICB0ZXh0LWFsaWduOiByaWdodDsKfQoKQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgLndvcmRpbmcgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMxNzE3MTc7CiAgICAgICAgY29sb3I6ICNkMGQwZDA7CiAgICB9CgogICAgLndvcmRpbmcgc3Bhbi5tangtbXN0eWxlIHsKICAgICAgICBjb2xvcjogI2QwZDBkMCAhaW1wb3J0YW50CiAgICB9CgogICAgLndvcmRpbmcgYTpsaW5rIHsKICAgICAgICBjb2xvcjogIzY0YWRmZjsKICAgIH0KCiAgICAud29yZGluZyBhOnZpc2l0ZWQgewogICAgICAgIGNvbG9yOiAjYTM2YWU2OwogICAgfQoKICAgIC53b3JkaW5nIGEuaGlkZGVuX2xpbmsgewogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgICBjb2xvcjogaW5oZXJpdDsKICAgIH0KCiAgICAud29yZGluZyBzcGFuLnBoYW50b20gewogICAgICAgIGNvbG9yOiAjMTcxNzE3OwogICAgfQoKICAgIC53b3JkaW5nIGEuaW5kZXg6YmVmb3JlIHsKICAgICAgICBjb2xvcjogI2QwZDBkMDsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGI2MzUzOwogICAgfQoKICAgIC53b3JkaW5nIC5jb21tZW50IHsKICAgICAgICBjb2xvcjogIzM1ZGEwMDsKICAgIH0KCiAgICAud29yZGluZyAuZm9vdG5vdGUgLmNvbW1lbnQgewogICAgICAgIGNvbG9yOiAjMzVkYTAwOwogICAgfQoKICAgIC53b3JkaW5nIC5leGFtcGxlIC5jb21tZW50IHsKICAgICAgICBjb2xvcjogIzM1ZGEwMDsKICAgIH0KCiAgICAud29yZGluZyAubm90ZSAuY29tbWVudCB7CiAgICAgICAgY29sb3I6ICMzNWRhMDA7CiAgICB9CgogICAgLndvcmRpbmcgc3Bhbi5rZXl3b3JkIHsKICAgICAgICBjb2xvcjogIzEyY2FiZTsKICAgIH0KCiAgICAud29yZGluZyBzcGFuLnBhcmVudGhlc2lzIHsKICAgICAgICBjb2xvcjogI2ZmMTUxNTsKICAgIH0KCiAgICAud29yZGluZyBzcGFuLmN1cmx5YnJhY2tldCB7CiAgICAgICAgY29sb3I6ICNmZjE1MTU7CiAgICB9CgogICAgLndvcmRpbmcgc3Bhbi5zcXVhcmVicmFja2V0IHsKICAgICAgICBjb2xvcjogI2ZmMTUxNTsKICAgIH0KCiAgICAud29yZGluZyBzcGFuLmxpdGVyYWwgewogICAgICAgIGNvbG9yOiAjZGZhODM3OwogICAgfQoKICAgIC53b3JkaW5nIHNwYW4ubGl0ZXJhbHRlcm1pbmFsIHsKICAgICAgICBjb2xvcjogI2RmYTgzNzsKICAgIH0KCiAgICAud29yZGluZyBzcGFuLm9wZXJhdG9yIHsKICAgICAgICBjb2xvcjogI2JhYTZiOTsKICAgIH0KCiAgICAud29yZGluZyBzcGFuLmFuZ2xlYnJhY2tldCB7CiAgICAgICAgY29sb3I6ICNiYWE2Yjk7CiAgICB9CgogICAgLndvcmRpbmcgc3Bhbi5wcmVwcm9jZXNzb3JkaXJlY3RpdmUgewogICAgICAgIGNvbG9yOiAjYjI3YzU4OwogICAgfQoKICAgIC53b3JkaW5nIHRhYmxlIHsKICAgICAgICBib3JkZXItY29sb3I6ICNkMGQwZDA7CiAgICB9CgogICAgLndvcmRpbmcgdGQuYm9yZGVyIHsKICAgICAgICBib3JkZXItY29sb3I6ICNkMGQwZDA7CiAgICB9CgogICAgLndvcmRpbmcgdGQuYm9yZGVyIHsKICAgICAgICBib3JkZXItbGVmdC1jb2xvcjogI2QwZDBkMDsKICAgIH0KCiAgICAud29yZGluZyB0ci5yb3dzZXAsIHRkLmNsaW5lIHsKICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAjZDBkMGQwOwogICAgfQoKICAgIC53b3JkaW5nIHRyLmNhcHNlcCB7CiAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogI2QwZDBkMDsKICAgIH0KCiAgICAud29yZGluZyB0aCB7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2QwZDBkMDsKICAgIH0KCiAgICAud29yZGluZyAuZm9vdG5vdGVTZXBhcmF0b3IgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNkMGQwZDA7CiAgICB9CgogICAgLndvcmRpbmcgdGV4dCB7CiAgICAgICAgZmlsbDogI2QwZDBkMDsKICAgIH0KCiAgICAud29yZGluZyBwYXRoIHsKICAgICAgICBzdHJva2U6ICNkMGQwZDA7CiAgICB9CgogICAgLndvcmRpbmcgcG9seWdvbiB7CiAgICAgICAgc3Ryb2tlOiAjZDBkMGQwOwogICAgICAgIGZpbGw6ICNkMGQwZDA7CiAgICB9CgogICAgLndvcmRpbmcgZWxsaXBzZSB7CiAgICAgICAgc3Ryb2tlOiAjZDBkMGQwOwogICAgfQoKfQoKLndvcmRpbmcgLm1qeC1jaHRtbCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICBsaW5lLWhlaWdodDogMDsKICAgIHRleHQtaW5kZW50OiAwOwogICAgdGV4dC1hbGlnbjogbGVmdDsKICAgIHRleHQtdHJhbnNmb3JtOiBub25lOwogICAgZm9udC1zdHlsZTogbm9ybWFsOwogICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgIGZvbnQtc2l6ZTogMTAwJTsKICAgIGZvbnQtc2l6ZS1hZGp1c3Q6IG5vbmU7CiAgICBsZXR0ZXItc3BhY2luZzogbm9ybWFsOwogICAgd29yZC13cmFwOiBub3JtYWw7CiAgICB3b3JkLXNwYWNpbmc6IG5vcm1hbDsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBmbG9hdDogbm9uZTsKICAgIGRpcmVjdGlvbjogbHRyOwogICAgbWF4LXdpZHRoOiBub25lOwogICAgbWF4LWhlaWdodDogbm9uZTsKICAgIG1pbi13aWR0aDogMDsKICAgIG1pbi1oZWlnaHQ6IDA7CiAgICBib3JkZXI6IDA7CiAgICBtYXJnaW46IDA7CiAgICBwYWRkaW5nOiAxcHggMAp9Cgoud29yZGluZyAuTUpYYy1kaXNwbGF5IHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgYmFja2dyb3VuZDogaW5oZXJpdDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIG1hcmdpbjogMWVtIDA7CiAgICBwYWRkaW5nOiAwCn0KCi53b3JkaW5nIC5tangtY2h0bWxbdGFiaW5kZXhdOmZvY3VzLCAud29yZGluZyAgOmZvY3VzIC5tangtY2h0bWxbdGFiaW5kZXhdIHsKICAgIGRpc3BsYXk6IGlubGluZS10YWJsZQp9Cgoud29yZGluZyAubWp4LWZ1bGwtd2lkdGggewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50OwogICAgd2lkdGg6IDEwMDAwZW0KfQoKLndvcmRpbmcgLm1qeC1tYXRoIHsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CiAgICBib3JkZXItc3BhY2luZzogMAp9Cgoud29yZGluZyAubWp4LW1hdGggKiB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAtd2Via2l0LWJveC1zaXppbmc6IGNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7CiAgICAtbW96LWJveC1zaXppbmc6IGNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7CiAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveCAhaW1wb3J0YW50OwogICAgdGV4dC1hbGlnbjogbGVmdAp9Cgoud29yZGluZyAubWp4LW51bWVyYXRvciB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGJhY2tncm91bmQ6IGluaGVyaXQ7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXIKfQoKLndvcmRpbmcgLm1qeC1kZW5vbWluYXRvciB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGJhY2tncm91bmQ6IGluaGVyaXQ7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXIKfQoKLndvcmRpbmcgLk1KWGMtc3RhY2tlZCB7CiAgICBoZWlnaHQ6IDA7CiAgICBwb3NpdGlvbjogcmVsYXRpdmUKfQoKLndvcmRpbmcgLk1KWGMtc3RhY2tlZCA+ICogewogICAgcG9zaXRpb246IGFic29sdXRlCn0KCi53b3JkaW5nIC5NSlhjLWJldmVsbGVkID4gKiB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sKfQoKLndvcmRpbmcgLm1qeC1zdGFjayB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sKfQoKLndvcmRpbmcgLm1qeC1vcCB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGJhY2tncm91bmQ6IGluaGVyaXQKfQoKLndvcmRpbmcgLm1qeC11bmRlciB7CiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsCn0KCi53b3JkaW5nIC5tangtb3ZlciB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGJhY2tncm91bmQ6IGluaGVyaXQKfQoKLndvcmRpbmcgLm1qeC1vdmVyID4gKiB7CiAgICBwYWRkaW5nLWxlZnQ6IDBweCAhaW1wb3J0YW50OwogICAgcGFkZGluZy1yaWdodDogMHB4ICFpbXBvcnRhbnQKfQoKLndvcmRpbmcgLm1qeC11bmRlciA+ICogewogICAgcGFkZGluZy1sZWZ0OiAwcHggIWltcG9ydGFudDsKICAgIHBhZGRpbmctcmlnaHQ6IDBweCAhaW1wb3J0YW50Cn0KCi53b3JkaW5nIC5tangtc3RhY2sgPiAubWp4LXN1cCB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGJhY2tncm91bmQ6IGluaGVyaXQKfQoKLndvcmRpbmcgLm1qeC1zdGFjayA+IC5tangtc3ViIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgYmFja2dyb3VuZDogaW5oZXJpdAp9Cgoud29yZGluZyAubWp4LXByZXN0YWNrID4gLm1qeC1wcmVzdXAgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBiYWNrZ3JvdW5kOiBpbmhlcml0Cn0KCi53b3JkaW5nIC5tangtcHJlc3RhY2sgPiAubWp4LXByZXN1YiB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGJhY2tncm91bmQ6IGluaGVyaXQKfQoKLndvcmRpbmcgLm1qeC1kZWxpbS1oID4gLm1qeC1jaGFyIHsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jawp9Cgoud29yZGluZyAubWp4LXN1cmQgewogICAgdmVydGljYWwtYWxpZ246IHRvcAp9Cgoud29yZGluZyAubWp4LW1waGFudG9tICogewogICAgdmlzaWJpbGl0eTogaGlkZGVuCn0KCi53b3JkaW5nIC5tangtbWVycm9yIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICNGRkZGODg7CiAgICBjb2xvcjogI0NDMDAwMDsKICAgIGJvcmRlcjogMXB4IHNvbGlkICNDQzAwMDA7CiAgICBwYWRkaW5nOiAycHggM3B4OwogICAgZm9udC1zdHlsZTogbm9ybWFsOwogICAgZm9udC1zaXplOiA5MCUKfQoKLndvcmRpbmcgLm1qeC1hbm5vdGF0aW9uLXhtbCB7CiAgICBsaW5lLWhlaWdodDogbm9ybWFsCn0KCi53b3JkaW5nIC5tangtbWVuY2xvc2UgPiBzdmcgewogICAgZmlsbDogbm9uZTsKICAgIHN0cm9rZTogY3VycmVudENvbG9yCn0KCi53b3JkaW5nIC5tangtbXRyIHsKICAgIGRpc3BsYXk6IHRhYmxlLXJvdwp9Cgoud29yZGluZyAubWp4LW1sYWJlbGVkdHIgewogICAgZGlzcGxheTogdGFibGUtcm93Cn0KCi53b3JkaW5nIC5tangtbXRkIHsKICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXIKfQoKLndvcmRpbmcgLm1qeC1sYWJlbCB7CiAgICBkaXNwbGF5OiB0YWJsZS1yb3cKfQoKLndvcmRpbmcgLm1qeC1ib3ggewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrCn0KCi53b3JkaW5nIC5tangtYmxvY2sgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBiYWNrZ3JvdW5kOiBpbmhlcml0Cn0KCi53b3JkaW5nIC5tangtc3BhbiB7CiAgICBkaXNwbGF5OiBpbmxpbmUKfQoKLndvcmRpbmcgLm1qeC1jaGFyIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgYmFja2dyb3VuZDogaW5oZXJpdDsKICAgIHdoaXRlLXNwYWNlOiBwcmUKfQoKLndvcmRpbmcgLm1qeC1pdGFibGUgewogICAgZGlzcGxheTogaW5saW5lLXRhYmxlOwogICAgd2lkdGg6IGF1dG8KfQoKLndvcmRpbmcgLm1qeC1yb3cgewogICAgZGlzcGxheTogdGFibGUtcm93Cn0KCi53b3JkaW5nIC5tangtY2VsbCB7CiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsCn0KCi53b3JkaW5nIC5tangtdGFibGUgewogICAgZGlzcGxheTogdGFibGU7CiAgICB3aWR0aDogMTAwJQp9Cgoud29yZGluZyAubWp4LWxpbmUgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBiYWNrZ3JvdW5kOiBpbmhlcml0OwogICAgaGVpZ2h0OiAwCn0KCi53b3JkaW5nIC5tangtc3RydXQgewogICAgd2lkdGg6IDA7CiAgICBwYWRkaW5nLXRvcDogMWVtCn0KCi53b3JkaW5nIC5tangtdnNpemUgewogICAgd2lkdGg6IDAKfQoKLndvcmRpbmcgLk1KWGMtc3BhY2UxIHsKICAgIG1hcmdpbi1sZWZ0OiAuMTY3ZW0KfQoKLndvcmRpbmcgLk1KWGMtc3BhY2UyIHsKICAgIG1hcmdpbi1sZWZ0OiAuMjIyZW0KfQoKLndvcmRpbmcgLk1KWGMtc3BhY2UzIHsKICAgIG1hcmdpbi1sZWZ0OiAuMjc4ZW0KfQoKLndvcmRpbmcgLm1qeC1leC1ib3gtdGVzdCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CgkJb3ZlcmZsb3cteDogdmlzaWJsZTsKCQlvdmVyZmxvdy15OiBkZWZhdWx0OwogICAgd2lkdGg6IDFweDsKICAgIGhlaWdodDogNjBleAp9Cgoud29yZGluZyAubWp4LWxpbmUtYm94LXRlc3QgewogICAgZGlzcGxheTogdGFibGUgIWltcG9ydGFudAp9Cgoud29yZGluZyAubWp4LWxpbmUtYm94LXRlc3Qgc3BhbiB7CiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsICFpbXBvcnRhbnQ7CiAgICB3aWR0aDogMTAwMDBlbSAhaW1wb3J0YW50OwogICAgbWluLXdpZHRoOiAwOwogICAgbWF4LXdpZHRoOiBub25lOwogICAgcGFkZGluZzogMDsKICAgIGJvcmRlcjogMDsKICAgIG1hcmdpbjogMAp9Cgoud29yZGluZyAuTUpYYy1UZVgtdW5rbm93bi1SIHsKICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICBmb250LXN0eWxlOiBub3JtYWw7CiAgICBmb250LXdlaWdodDogbm9ybWFsCn0KCi53b3JkaW5nIC5NSlhjLVRlWC11bmtub3duLUkgewogICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgIGZvbnQtd2VpZ2h0OiBub3JtYWwKfQoKLndvcmRpbmcgLk1KWGMtVGVYLXVua25vd24tQiB7CiAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgZm9udC1zdHlsZTogbm9ybWFsOwogICAgZm9udC13ZWlnaHQ6IGJvbGQKfQoKLndvcmRpbmcgLk1KWGMtVGVYLXVua25vd24tQkkgewogICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgIGZvbnQtd2VpZ2h0OiBib2xkCn0KCi53b3JkaW5nIC5NSlhjLVRlWC1hbXMtUiB7CiAgICBmb250LWZhbWlseTogTUpYYy1UZVgtYW1zLVIsIE1KWGMtVGVYLWFtcy1Sdwp9Cgoud29yZGluZyAuTUpYYy1UZVgtY2FsLUIgewogICAgZm9udC1mYW1pbHk6IE1KWGMtVGVYLWNhbC1CLCBNSlhjLVRlWC1jYWwtQngsIE1KWGMtVGVYLWNhbC1Cdwp9Cgoud29yZGluZyAuTUpYYy1UZVgtZnJhay1SIHsKICAgIGZvbnQtZmFtaWx5OiBNSlhjLVRlWC1mcmFrLVIsIE1KWGMtVGVYLWZyYWstUncKfQoKLndvcmRpbmcgLk1KWGMtVGVYLWZyYWstQiB7CiAgICBmb250LWZhbWlseTogTUpYYy1UZVgtZnJhay1CLCBNSlhjLVRlWC1mcmFrLUJ4LCBNSlhjLVRlWC1mcmFrLUJ3Cn0KCi53b3JkaW5nIC5NSlhjLVRlWC1tYXRoLUJJIHsKICAgIGZvbnQtZmFtaWx5OiBNSlhjLVRlWC1tYXRoLUJJLCBNSlhjLVRlWC1tYXRoLUJJeCwgTUpYYy1UZVgtbWF0aC1CSXcKfQoKLndvcmRpbmcgLk1KWGMtVGVYLXNhbnMtUiB7CiAgICBmb250LWZhbWlseTogJ05vdG8gU2Fucyc7CiAgICBmb250LXNpemU6IDEwcHQ7Cn0KCi53b3JkaW5nIC5NSlhjLVRlWC1zYW5zLUIgewogICAgZm9udC1mYW1pbHk6IE1KWGMtVGVYLXNhbnMtQiwgTUpYYy1UZVgtc2Fucy1CeCwgTUpYYy1UZVgtc2Fucy1Cdwp9Cgoud29yZGluZyAuTUpYYy1UZVgtc2Fucy1JIHsKICAgIGZvbnQtZmFtaWx5OiBNSlhjLVRlWC1zYW5zLUksIE1KWGMtVGVYLXNhbnMtSXgsIE1KWGMtVGVYLXNhbnMtSXcKfQoKLndvcmRpbmcgLk1KWGMtVGVYLXNjcmlwdC1SIHsKICAgIGZvbnQtZmFtaWx5OiBNSlhjLVRlWC1zY3JpcHQtUiwgTUpYYy1UZVgtc2NyaXB0LVJ3Cn0KCi53b3JkaW5nIC5NSlhjLVRlWC10eXBlLVIgewogICAgZm9udC1mYW1pbHk6ICdOb3RvIFNhbnMgTW9ubyc7CiAgICBmb250LXNpemU6IDEwcHQ7Cn0KCi53b3JkaW5nIC5NSlhjLVRlWC1jYWwtUiB7CiAgICBmb250LWZhbWlseTogTUpYYy1UZVgtY2FsLVIsIE1KWGMtVGVYLWNhbC1Sdwp9Cgoud29yZGluZyAuTUpYYy1UZVgtbWFpbi1CIHsKICAgIGZvbnQtZmFtaWx5OiBNSlhjLVRlWC1tYWluLUIsIE1KWGMtVGVYLW1haW4tQngsIE1KWGMtVGVYLW1haW4tQncKfQoKLndvcmRpbmcgLk1KWGMtVGVYLW1haW4tSSB7CiAgICBmb250LXN0eWxlOiBpdGFsaWMKfQoKLndvcmRpbmcgLk1KWGMtVGVYLW1haW4tUiB7Cn0KCi53b3JkaW5nIC5NSlhjLVRlWC1tYXRoLUkgewogICAgZm9udC1zdHlsZTogaXRhbGljCn0KCi53b3JkaW5nIC5NSlhjLVRlWC1zaXplMS1SIHsKICAgIGZvbnQtZmFtaWx5OiBNSlhjLVRlWC1zaXplMS1SLCBNSlhjLVRlWC1zaXplMS1Sdwp9Cgoud29yZGluZyAuTUpYYy1UZVgtc2l6ZTItUiB7CiAgICBmb250LWZhbWlseTogTUpYYy1UZVgtc2l6ZTItUiwgTUpYYy1UZVgtc2l6ZTItUncKfQoKLndvcmRpbmcgLk1KWGMtVGVYLXNpemUzLVIgewogICAgZm9udC1mYW1pbHk6IE1KWGMtVGVYLXNpemUzLVIsIE1KWGMtVGVYLXNpemUzLVJ3Cn0KCi53b3JkaW5nIC5NSlhjLVRlWC1zaXplNC1SIHsKICAgIGZvbnQtZmFtaWx5OiBNSlhjLVRlWC1zaXplNC1SLCBNSlhjLVRlWC1zaXplNC1Sdwp9Cgoud29yZGluZyAuTUpYYy1UZVgtdmVjLVIgewogICAgZm9udC1mYW1pbHk6IE1KWGMtVGVYLXZlYy1SLCBNSlhjLVRlWC12ZWMtUncKfQoKLndvcmRpbmcgLk1KWGMtVGVYLXZlYy1CIHsKICAgIGZvbnQtZmFtaWx5OiBNSlhjLVRlWC12ZWMtQiwgTUpYYy1UZVgtdmVjLUJ4LCBNSlhjLVRlWC12ZWMtQncKfQoKQGZvbnQtZmFjZSB7CiAgICBmb250LWZhbWlseTogTUpYYy1UZVgtYW1zLVI7CiAgICBzcmM6IGxvY2FsKCdNYXRoSmF4X0FNUycpLCBsb2NhbCgnTWF0aEpheF9BTVMtUmVndWxhcicpCn0KCkBmb250LWZhY2UgewogICAgZm9udC1mYW1pbHk6IE1KWGMtVGVYLWFtcy1SdzsKICAgIHNyYyAvKjEqLzogdXJsKCdodHRwczovL2Nkbi5tYXRoamF4Lm9yZy9tYXRoamF4L2xhdGVzdC9mb250cy9IVE1MLUNTUy9UZVgvZW90L01hdGhKYXhfQU1TLVJlZ3VsYXIuZW90Jyk7CiAgICBzcmMgLyoyKi86IHVybCgnaHR0cHM6Ly9jZG4ubWF0aGpheC5vcmcvbWF0aGpheC9sYXRlc3QvZm9udHMvSFRNTC1DU1MvVGVYL3dvZmYvTWF0aEpheF9BTVMtUmVndWxhci53b2ZmJykgZm9ybWF0KCd3b2ZmJyksIHVybCgnaHR0cHM6Ly9jZG4ubWF0aGpheC5vcmcvbWF0aGpheC9sYXRlc3QvZm9udHMvSFRNTC1DU1MvVGVYL290Zi9NYXRoSmF4X0FNUy1SZWd1bGFyLm90ZicpIGZvcm1hdCgnb3BlbnR5cGUnKQp9CgpAZm9udC1mYWNlIHsKICAgIGZvbnQtZmFtaWx5OiBNSlhjLVRlWC1jYWwtQjsKICAgIHNyYzogbG9jYWwoJ01hdGhKYXhfQ2FsaWdyYXBoaWMgQm9sZCcpLCBsb2NhbCgnTWF0aEpheF9DYWxpZ3JhcGhpYy1Cb2xkJykKfQoKQGZvbnQtZmFjZSB7CiAgICBmb250LWZhbWlseTogTUpYYy1UZVgtY2FsLUJ4OwogICAgc3JjOiBsb2NhbCgnTWF0aEpheF9DYWxpZ3JhcGhpYycpOwogICAgZm9udC13ZWlnaHQ6IGJvbGQKfQoKQGZvbnQtZmFjZSB7CiAgICBmb250LWZhbWlseTogTUpYYy1UZVgtY2FsLUJ3OwogICAgc3JjIC8qMSovOiB1cmwoJ2h0dHBzOi8vY2RuLm1hdGhqYXgub3JnL21hdGhqYXgvbGF0ZXN0L2ZvbnRzL0hUTUwtQ1NTL1RlWC9lb3QvTWF0aEpheF9DYWxpZ3JhcGhpYy1Cb2xkLmVvdCcpOwogICAgc3JjIC8qMiovOiB1cmwoJ2h0dHBzOi8vY2RuLm1hdGhqYXgub3JnL21hdGhqYXgvbGF0ZXN0L2ZvbnRzL0hUTUwtQ1NTL1RlWC93b2ZmL01hdGhKYXhfQ2FsaWdyYXBoaWMtQm9sZC53b2ZmJykgZm9ybWF0KCd3b2ZmJyksIHVybCgnaHR0cHM6Ly9jZG4ubWF0aGpheC5vcmcvbWF0aGpheC9sYXRlc3QvZm9udHMvSFRNTC1DU1MvVGVYL290Zi9NYXRoSmF4X0NhbGlncmFwaGljLUJvbGQub3RmJykgZm9ybWF0KCdvcGVudHlwZScpCn0KCkBmb250LWZhY2UgewogICAgZm9udC1mYW1pbHk6IE1KWGMtVGVYLWZyYWstUjsKICAgIHNyYzogbG9jYWwoJ01hdGhKYXhfRnJha3R1cicpLCBsb2NhbCgnTWF0aEpheF9GcmFrdHVyLVJlZ3VsYXInKQp9CgpAZm9udC1mYWNlIHsKICAgIGZvbnQtZmFtaWx5OiBNSlhjLVRlWC1mcmFrLVJ3OwogICAgc3JjIC8qMSovOiB1cmwoJ2h0dHBzOi8vY2RuLm1hdGhqYXgub3JnL21hdGhqYXgvbGF0ZXN0L2ZvbnRzL0hUTUwtQ1NTL1RlWC9lb3QvTWF0aEpheF9GcmFrdHVyLVJlZ3VsYXIuZW90Jyk7CiAgICBzcmMgLyoyKi86IHVybCgnaHR0cHM6Ly9jZG4ubWF0aGpheC5vcmcvbWF0aGpheC9sYXRlc3QvZm9udHMvSFRNTC1DU1MvVGVYL3dvZmYvTWF0aEpheF9GcmFrdHVyLVJlZ3VsYXIud29mZicpIGZvcm1hdCgnd29mZicpLCB1cmwoJ2h0dHBzOi8vY2RuLm1hdGhqYXgub3JnL21hdGhqYXgvbGF0ZXN0L2ZvbnRzL0hUTUwtQ1NTL1RlWC9vdGYvTWF0aEpheF9GcmFrdHVyLVJlZ3VsYXIub3RmJykgZm9ybWF0KCdvcGVudHlwZScpCn0KCkBmb250LWZhY2UgewogICAgZm9udC1mYW1pbHk6IE1KWGMtVGVYLWZyYWstQjsKICAgIHNyYzogbG9jYWwoJ01hdGhKYXhfRnJha3R1ciBCb2xkJyksIGxvY2FsKCdNYXRoSmF4X0ZyYWt0dXItQm9sZCcpCn0KCkBmb250LWZhY2UgewogICAgZm9udC1mYW1pbHk6IE1KWGMtVGVYLWZyYWstQng7CiAgICBzcmM6IGxvY2FsKCdNYXRoSmF4X0ZyYWt0dXInKTsKICAgIGZvbnQtd2VpZ2h0OiBib2xkCn0KCkBmb250LWZhY2UgewogICAgZm9udC1mYW1pbHk6IE1KWGMtVGVYLWZyYWstQnc7CiAgICBzcmMgLyoxKi86IHVybCgnaHR0cHM6Ly9jZG4ubWF0aGpheC5vcmcvbWF0aGpheC9sYXRlc3QvZm9udHMvSFRNTC1DU1MvVGVYL2VvdC9NYXRoSmF4X0ZyYWt0dXItQm9sZC5lb3QnKTsKICAgIHNyYyAvKjIqLzogdXJsKCdodHRwczovL2Nkbi5tYXRoamF4Lm9yZy9tYXRoamF4L2xhdGVzdC9mb250cy9IVE1MLUNTUy9UZVgvd29mZi9NYXRoSmF4X0ZyYWt0dXItQm9sZC53b2ZmJykgZm9ybWF0KCd3b2ZmJyksIHVybCgnaHR0cHM6Ly9jZG4ubWF0aGpheC5vcmcvbWF0aGpheC9sYXRlc3QvZm9udHMvSFRNTC1DU1MvVGVYL290Zi9NYXRoSmF4X0ZyYWt0dXItQm9sZC5vdGYnKSBmb3JtYXQoJ29wZW50eXBlJykKfQoKQGZvbnQtZmFjZSB7CiAgICBmb250LWZhbWlseTogTUpYYy1UZVgtbWF0aC1CSTsKICAgIHNyYzogbG9jYWwoJ01hdGhKYXhfTWF0aCBCb2xkSXRhbGljJyksIGxvY2FsKCdNYXRoSmF4X01hdGgtQm9sZEl0YWxpYycpCn0KCkBmb250LWZhY2UgewogICAgZm9udC1mYW1pbHk6IE1KWGMtVGVYLW1hdGgtQkl4OwogICAgc3JjOiBsb2NhbCgnTWF0aEpheF9NYXRoJyk7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYwp9CgpAZm9udC1mYWNlIHsKICAgIGZvbnQtZmFtaWx5OiBNSlhjLVRlWC1tYXRoLUJJdzsKICAgIHNyYyAvKjEqLzogdXJsKCdodHRwczovL2Nkbi5tYXRoamF4Lm9yZy9tYXRoamF4L2xhdGVzdC9mb250cy9IVE1MLUNTUy9UZVgvZW90L01hdGhKYXhfTWF0aC1Cb2xkSXRhbGljLmVvdCcpOwogICAgc3JjIC8qMiovOiB1cmwoJ2h0dHBzOi8vY2RuLm1hdGhqYXgub3JnL21hdGhqYXgvbGF0ZXN0L2ZvbnRzL0hUTUwtQ1NTL1RlWC93b2ZmL01hdGhKYXhfTWF0aC1Cb2xkSXRhbGljLndvZmYnKSBmb3JtYXQoJ3dvZmYnKSwgdXJsKCdodHRwczovL2Nkbi5tYXRoamF4Lm9yZy9tYXRoamF4L2xhdGVzdC9mb250cy9IVE1MLUNTUy9UZVgvb3RmL01hdGhKYXhfTWF0aC1Cb2xkSXRhbGljLm90ZicpIGZvcm1hdCgnb3BlbnR5cGUnKQp9CgpAZm9udC1mYWNlIHsKICAgIGZvbnQtZmFtaWx5OiBNSlhjLVRlWC1zYW5zLVI7CiAgICBzcmM6IGxvY2FsKCdNYXRoSmF4X1NhbnNTZXJpZicpLCBsb2NhbCgnTWF0aEpheF9TYW5zU2VyaWYtUmVndWxhcicpCn0KCkBmb250LWZhY2UgewogICAgZm9udC1mYW1pbHk6IE1KWGMtVGVYLXNhbnMtUnc7CiAgICBzcmMgLyoxKi86IHVybCgnaHR0cHM6Ly9jZG4ubWF0aGpheC5vcmcvbWF0aGpheC9sYXRlc3QvZm9udHMvSFRNTC1DU1MvVGVYL2VvdC9NYXRoSmF4X1NhbnNTZXJpZi1SZWd1bGFyLmVvdCcpOwogICAgc3JjIC8qMiovOiB1cmwoJ2h0dHBzOi8vY2RuLm1hdGhqYXgub3JnL21hdGhqYXgvbGF0ZXN0L2ZvbnRzL0hUTUwtQ1NTL1RlWC93b2ZmL01hdGhKYXhfU2Fuc1NlcmlmLVJlZ3VsYXIud29mZicpIGZvcm1hdCgnd29mZicpLCB1cmwoJ2h0dHBzOi8vY2RuLm1hdGhqYXgub3JnL21hdGhqYXgvbGF0ZXN0L2ZvbnRzL0hUTUwtQ1NTL1RlWC9vdGYvTWF0aEpheF9TYW5zU2VyaWYtUmVndWxhci5vdGYnKSBmb3JtYXQoJ29wZW50eXBlJykKfQoKQGZvbnQtZmFjZSB7CiAgICBmb250LWZhbWlseTogTUpYYy1UZVgtc2Fucy1COwogICAgc3JjOiBsb2NhbCgnTWF0aEpheF9TYW5zU2VyaWYgQm9sZCcpLCBsb2NhbCgnTWF0aEpheF9TYW5zU2VyaWYtQm9sZCcpCn0KCkBmb250LWZhY2UgewogICAgZm9udC1mYW1pbHk6IE1KWGMtVGVYLXNhbnMtQng7CiAgICBzcmM6IGxvY2FsKCdNYXRoSmF4X1NhbnNTZXJpZicpOwogICAgZm9udC13ZWlnaHQ6IGJvbGQKfQoKQGZvbnQtZmFjZSB7CiAgICBmb250LWZhbWlseTogTUpYYy1UZVgtc2Fucy1CdzsKICAgIHNyYyAvKjEqLzogdXJsKCdodHRwczovL2Nkbi5tYXRoamF4Lm9yZy9tYXRoamF4L2xhdGVzdC9mb250cy9IVE1MLUNTUy9UZVgvZW90L01hdGhKYXhfU2Fuc1NlcmlmLUJvbGQuZW90Jyk7CiAgICBzcmMgLyoyKi86IHVybCgnaHR0cHM6Ly9jZG4ubWF0aGpheC5vcmcvbWF0aGpheC9sYXRlc3QvZm9udHMvSFRNTC1DU1MvVGVYL3dvZmYvTWF0aEpheF9TYW5zU2VyaWYtQm9sZC53b2ZmJykgZm9ybWF0KCd3b2ZmJyksIHVybCgnaHR0cHM6Ly9jZG4ubWF0aGpheC5vcmcvbWF0aGpheC9sYXRlc3QvZm9udHMvSFRNTC1DU1MvVGVYL290Zi9NYXRoSmF4X1NhbnNTZXJpZi1Cb2xkLm90ZicpIGZvcm1hdCgnb3BlbnR5cGUnKQp9CgpAZm9udC1mYWNlIHsKICAgIGZvbnQtZmFtaWx5OiBNSlhjLVRlWC1zYW5zLUk7CiAgICBzcmM6IGxvY2FsKCdNYXRoSmF4X1NhbnNTZXJpZiBJdGFsaWMnKSwgbG9jYWwoJ01hdGhKYXhfU2Fuc1NlcmlmLUl0YWxpYycpCn0KCkBmb250LWZhY2UgewogICAgZm9udC1mYW1pbHk6IE1KWGMtVGVYLXNhbnMtSXg7CiAgICBzcmM6IGxvY2FsKCdNYXRoSmF4X1NhbnNTZXJpZicpOwogICAgZm9udC1zdHlsZTogaXRhbGljCn0KCkBmb250LWZhY2UgewogICAgZm9udC1mYW1pbHk6IE1KWGMtVGVYLXNhbnMtSXc7CiAgICBzcmMgLyoxKi86IHVybCgnaHR0cHM6Ly9jZG4ubWF0aGpheC5vcmcvbWF0aGpheC9sYXRlc3QvZm9udHMvSFRNTC1DU1MvVGVYL2VvdC9NYXRoSmF4X1NhbnNTZXJpZi1JdGFsaWMuZW90Jyk7CiAgICBzcmMgLyoyKi86IHVybCgnaHR0cHM6Ly9jZG4ubWF0aGpheC5vcmcvbWF0aGpheC9sYXRlc3QvZm9udHMvSFRNTC1DU1MvVGVYL3dvZmYvTWF0aEpheF9TYW5zU2VyaWYtSXRhbGljLndvZmYnKSBmb3JtYXQoJ3dvZmYnKSwgdXJsKCdodHRwczovL2Nkbi5tYXRoamF4Lm9yZy9tYXRoamF4L2xhdGVzdC9mb250cy9IVE1MLUNTUy9UZVgvb3RmL01hdGhKYXhfU2Fuc1NlcmlmLUl0YWxpYy5vdGYnKSBmb3JtYXQoJ29wZW50eXBlJykKfQoKQGZvbnQtZmFjZSB7CiAgICBmb250LWZhbWlseTogTUpYYy1UZVgtc2NyaXB0LVI7CiAgICBzcmM6IGxvY2FsKCdNYXRoSmF4X1NjcmlwdCcpLCBsb2NhbCgnTWF0aEpheF9TY3JpcHQtUmVndWxhcicpCn0KCkBmb250LWZhY2UgewogICAgZm9udC1mYW1pbHk6IE1KWGMtVGVYLXNjcmlwdC1SdzsKICAgIHNyYyAvKjEqLzogdXJsKCdodHRwczovL2Nkbi5tYXRoamF4Lm9yZy9tYXRoamF4L2xhdGVzdC9mb250cy9IVE1MLUNTUy9UZVgvZW90L01hdGhKYXhfU2NyaXB0LVJlZ3VsYXIuZW90Jyk7CiAgICBzcmMgLyoyKi86IHVybCgnaHR0cHM6Ly9jZG4ubWF0aGpheC5vcmcvbWF0aGpheC9sYXRlc3QvZm9udHMvSFRNTC1DU1MvVGVYL3dvZmYvTWF0aEpheF9TY3JpcHQtUmVndWxhci53b2ZmJykgZm9ybWF0KCd3b2ZmJyksIHVybCgnaHR0cHM6Ly9jZG4ubWF0aGpheC5vcmcvbWF0aGpheC9sYXRlc3QvZm9udHMvSFRNTC1DU1MvVGVYL290Zi9NYXRoSmF4X1NjcmlwdC1SZWd1bGFyLm90ZicpIGZvcm1hdCgnb3BlbnR5cGUnKQp9CgpAZm9udC1mYWNlIHsKICAgIGZvbnQtZmFtaWx5OiBNSlhjLVRlWC10eXBlLVI7CiAgICBzcmM6IGxvY2FsKCdNYXRoSmF4X1R5cGV3cml0ZXInKSwgbG9jYWwoJ01hdGhKYXhfVHlwZXdyaXRlci1SZWd1bGFyJykKfQoKQGZvbnQtZmFjZSB7CiAgICBmb250LWZhbWlseTogTUpYYy1UZVgtdHlwZS1SdzsKICAgIHNyYyAvKjEqLzogdXJsKCdodHRwczovL2Nkbi5tYXRoamF4Lm9yZy9tYXRoamF4L2xhdGVzdC9mb250cy9IVE1MLUNTUy9UZVgvZW90L01hdGhKYXhfVHlwZXdyaXRlci1SZWd1bGFyLmVvdCcpOwogICAgc3JjIC8qMiovOiB1cmwoJ2h0dHBzOi8vY2RuLm1hdGhqYXgub3JnL21hdGhqYXgvbGF0ZXN0L2ZvbnRzL0hUTUwtQ1NTL1RlWC93b2ZmL01hdGhKYXhfVHlwZXdyaXRlci1SZWd1bGFyLndvZmYnKSBmb3JtYXQoJ3dvZmYnKSwgdXJsKCdodHRwczovL2Nkbi5tYXRoamF4Lm9yZy9tYXRoamF4L2xhdGVzdC9mb250cy9IVE1MLUNTUy9UZVgvb3RmL01hdGhKYXhfVHlwZXdyaXRlci1SZWd1bGFyLm90ZicpIGZvcm1hdCgnb3BlbnR5cGUnKQp9CgpAZm9udC1mYWNlIHsKICAgIGZvbnQtZmFtaWx5OiBNSlhjLVRlWC1jYWwtUjsKICAgIHNyYzogbG9jYWwoJ01hdGhKYXhfQ2FsaWdyYXBoaWMnKSwgbG9jYWwoJ01hdGhKYXhfQ2FsaWdyYXBoaWMtUmVndWxhcicpCn0KCkBmb250LWZhY2UgewogICAgZm9udC1mYW1pbHk6IE1KWGMtVGVYLWNhbC1SdzsKICAgIHNyYyAvKjEqLzogdXJsKCdodHRwczovL2Nkbi5tYXRoamF4Lm9yZy9tYXRoamF4L2xhdGVzdC9mb250cy9IVE1MLUNTUy9UZVgvZW90L01hdGhKYXhfQ2FsaWdyYXBoaWMtUmVndWxhci5lb3QnKTsKICAgIHNyYyAvKjIqLzogdXJsKCdodHRwczovL2Nkbi5tYXRoamF4Lm9yZy9tYXRoamF4L2xhdGVzdC9mb250cy9IVE1MLUNTUy9UZVgvd29mZi9NYXRoSmF4X0NhbGlncmFwaGljLVJlZ3VsYXIud29mZicpIGZvcm1hdCgnd29mZicpLCB1cmwoJ2h0dHBzOi8vY2RuLm1hdGhqYXgub3JnL21hdGhqYXgvbGF0ZXN0L2ZvbnRzL0hUTUwtQ1NTL1RlWC9vdGYvTWF0aEpheF9DYWxpZ3JhcGhpYy1SZWd1bGFyLm90ZicpIGZvcm1hdCgnb3BlbnR5cGUnKQp9CgpAZm9udC1mYWNlIHsKICAgIGZvbnQtZmFtaWx5OiBNSlhjLVRlWC1tYWluLUI7CiAgICBzcmM6IGxvY2FsKCdNYXRoSmF4X01haW4gQm9sZCcpLCBsb2NhbCgnTWF0aEpheF9NYWluLUJvbGQnKQp9CgpAZm9udC1mYWNlIHsKICAgIGZvbnQtZmFtaWx5OiBNSlhjLVRlWC1tYWluLUJ4OwogICAgc3JjOiBsb2NhbCgnTWF0aEpheF9NYWluJyk7CiAgICBmb250LXdlaWdodDogYm9sZAp9CgpAZm9udC1mYWNlIHsKICAgIGZvbnQtZmFtaWx5OiBNSlhjLVRlWC1tYWluLUJ3OwogICAgc3JjIC8qMSovOiB1cmwoJ2h0dHBzOi8vY2RuLm1hdGhqYXgub3JnL21hdGhqYXgvbGF0ZXN0L2ZvbnRzL0hUTUwtQ1NTL1RlWC9lb3QvTWF0aEpheF9NYWluLUJvbGQuZW90Jyk7CiAgICBzcmMgLyoyKi86IHVybCgnaHR0cHM6Ly9jZG4ubWF0aGpheC5vcmcvbWF0aGpheC9sYXRlc3QvZm9udHMvSFRNTC1DU1MvVGVYL3dvZmYvTWF0aEpheF9NYWluLUJvbGQud29mZicpIGZvcm1hdCgnd29mZicpLCB1cmwoJ2h0dHBzOi8vY2RuLm1hdGhqYXgub3JnL21hdGhqYXgvbGF0ZXN0L2ZvbnRzL0hUTUwtQ1NTL1RlWC9vdGYvTWF0aEpheF9NYWluLUJvbGQub3RmJykgZm9ybWF0KCdvcGVudHlwZScpCn0KCkBmb250LWZhY2UgewogICAgZm9udC1mYW1pbHk6IE1KWGMtVGVYLW1haW4tSTsKICAgIHNyYzogbG9jYWwoJ01hdGhKYXhfTWFpbiBJdGFsaWMnKSwgbG9jYWwoJ01hdGhKYXhfTWFpbi1JdGFsaWMnKQp9CgpAZm9udC1mYWNlIHsKICAgIGZvbnQtZmFtaWx5OiBNSlhjLVRlWC1tYWluLUl4OwogICAgc3JjOiBsb2NhbCgnTWF0aEpheF9NYWluJyk7CiAgICBmb250LXN0eWxlOiBpdGFsaWMKfQoKQGZvbnQtZmFjZSB7CiAgICBmb250LWZhbWlseTogTUpYYy1UZVgtbWFpbi1JdzsKICAgIHNyYyAvKjEqLzogdXJsKCdodHRwczovL2Nkbi5tYXRoamF4Lm9yZy9tYXRoamF4L2xhdGVzdC9mb250cy9IVE1MLUNTUy9UZVgvZW90L01hdGhKYXhfTWFpbi1JdGFsaWMuZW90Jyk7CiAgICBzcmMgLyoyKi86IHVybCgnaHR0cHM6Ly9jZG4ubWF0aGpheC5vcmcvbWF0aGpheC9sYXRlc3QvZm9udHMvSFRNTC1DU1MvVGVYL3dvZmYvTWF0aEpheF9NYWluLUl0YWxpYy53b2ZmJykgZm9ybWF0KCd3b2ZmJyksIHVybCgnaHR0cHM6Ly9jZG4ubWF0aGpheC5vcmcvbWF0aGpheC9sYXRlc3QvZm9udHMvSFRNTC1DU1MvVGVYL290Zi9NYXRoSmF4X01haW4tSXRhbGljLm90ZicpIGZvcm1hdCgnb3BlbnR5cGUnKQp9CgpAZm9udC1mYWNlIHsKICAgIGZvbnQtZmFtaWx5OiBNSlhjLVRlWC1tYWluLVI7CiAgICBzcmM6IGxvY2FsKCdNYXRoSmF4X01haW4nKSwgbG9jYWwoJ01hdGhKYXhfTWFpbi1SZWd1bGFyJykKfQoKQGZvbnQtZmFjZSB7CiAgICBmb250LWZhbWlseTogTUpYYy1UZVgtbWFpbi1SdzsKICAgIHNyYyAvKjEqLzogdXJsKCdodHRwczovL2Nkbi5tYXRoamF4Lm9yZy9tYXRoamF4L2xhdGVzdC9mb250cy9IVE1MLUNTUy9UZVgvZW90L01hdGhKYXhfTWFpbi1SZWd1bGFyLmVvdCcpOwogICAgc3JjIC8qMiovOiB1cmwoJ2h0dHBzOi8vY2RuLm1hdGhqYXgub3JnL21hdGhqYXgvbGF0ZXN0L2ZvbnRzL0hUTUwtQ1NTL1RlWC93b2ZmL01hdGhKYXhfTWFpbi1SZWd1bGFyLndvZmYnKSBmb3JtYXQoJ3dvZmYnKSwgdXJsKCdodHRwczovL2Nkbi5tYXRoamF4Lm9yZy9tYXRoamF4L2xhdGVzdC9mb250cy9IVE1MLUNTUy9UZVgvb3RmL01hdGhKYXhfTWFpbi1SZWd1bGFyLm90ZicpIGZvcm1hdCgnb3BlbnR5cGUnKQp9CgpAZm9udC1mYWNlIHsKICAgIGZvbnQtZmFtaWx5OiBNSlhjLVRlWC1tYXRoLUk7CiAgICBzcmM6IGxvY2FsKCdNYXRoSmF4X01hdGggSXRhbGljJyksIGxvY2FsKCdNYXRoSmF4X01hdGgtSXRhbGljJykKfQoKQGZvbnQtZmFjZSB7CiAgICBmb250LWZhbWlseTogTUpYYy1UZVgtbWF0aC1JeDsKICAgIHNyYzogbG9jYWwoJ01hdGhKYXhfTWF0aCcpOwogICAgZm9udC1zdHlsZTogaXRhbGljCn0KCkBmb250LWZhY2UgewogICAgZm9udC1mYW1pbHk6IE1KWGMtVGVYLW1hdGgtSXc7CiAgICBzcmMgLyoxKi86IHVybCgnaHR0cHM6Ly9jZG4ubWF0aGpheC5vcmcvbWF0aGpheC9sYXRlc3QvZm9udHMvSFRNTC1DU1MvVGVYL2VvdC9NYXRoSmF4X01hdGgtSXRhbGljLmVvdCcpOwogICAgc3JjIC8qMiovOiB1cmwoJ2h0dHBzOi8vY2RuLm1hdGhqYXgub3JnL21hdGhqYXgvbGF0ZXN0L2ZvbnRzL0hUTUwtQ1NTL1RlWC93b2ZmL01hdGhKYXhfTWF0aC1JdGFsaWMud29mZicpIGZvcm1hdCgnd29mZicpLCB1cmwoJ2h0dHBzOi8vY2RuLm1hdGhqYXgub3JnL21hdGhqYXgvbGF0ZXN0L2ZvbnRzL0hUTUwtQ1NTL1RlWC9vdGYvTWF0aEpheF9NYXRoLUl0YWxpYy5vdGYnKSBmb3JtYXQoJ29wZW50eXBlJykKfQoKQGZvbnQtZmFjZSB7CiAgICBmb250LWZhbWlseTogTUpYYy1UZVgtc2l6ZTEtUjsKICAgIHNyYzogbG9jYWwoJ01hdGhKYXhfU2l6ZTEnKSwgbG9jYWwoJ01hdGhKYXhfU2l6ZTEtUmVndWxhcicpCn0KCkBmb250LWZhY2UgewogICAgZm9udC1mYW1pbHk6IE1KWGMtVGVYLXNpemUxLVJ3OwogICAgc3JjIC8qMSovOiB1cmwoJ2h0dHBzOi8vY2RuLm1hdGhqYXgub3JnL21hdGhqYXgvbGF0ZXN0L2ZvbnRzL0hUTUwtQ1NTL1RlWC9lb3QvTWF0aEpheF9TaXplMS1SZWd1bGFyLmVvdCcpOwogICAgc3JjIC8qMiovOiB1cmwoJ2h0dHBzOi8vY2RuLm1hdGhqYXgub3JnL21hdGhqYXgvbGF0ZXN0L2ZvbnRzL0hUTUwtQ1NTL1RlWC93b2ZmL01hdGhKYXhfU2l6ZTEtUmVndWxhci53b2ZmJykgZm9ybWF0KCd3b2ZmJyksIHVybCgnaHR0cHM6Ly9jZG4ubWF0aGpheC5vcmcvbWF0aGpheC9sYXRlc3QvZm9udHMvSFRNTC1DU1MvVGVYL290Zi9NYXRoSmF4X1NpemUxLVJlZ3VsYXIub3RmJykgZm9ybWF0KCdvcGVudHlwZScpCn0KCkBmb250LWZhY2UgewogICAgZm9udC1mYW1pbHk6IE1KWGMtVGVYLXNpemUyLVI7CiAgICBzcmM6IGxvY2FsKCdNYXRoSmF4X1NpemUyJyksIGxvY2FsKCdNYXRoSmF4X1NpemUyLVJlZ3VsYXInKQp9CgpAZm9udC1mYWNlIHsKICAgIGZvbnQtZmFtaWx5OiBNSlhjLVRlWC1zaXplMi1SdzsKICAgIHNyYyAvKjEqLzogdXJsKCdodHRwczovL2Nkbi5tYXRoamF4Lm9yZy9tYXRoamF4L2xhdGVzdC9mb250cy9IVE1MLUNTUy9UZVgvZW90L01hdGhKYXhfU2l6ZTItUmVndWxhci5lb3QnKTsKICAgIHNyYyAvKjIqLzogdXJsKCdodHRwczovL2Nkbi5tYXRoamF4Lm9yZy9tYXRoamF4L2xhdGVzdC9mb250cy9IVE1MLUNTUy9UZVgvd29mZi9NYXRoSmF4X1NpemUyLVJlZ3VsYXIud29mZicpIGZvcm1hdCgnd29mZicpLCB1cmwoJ2h0dHBzOi8vY2RuLm1hdGhqYXgub3JnL21hdGhqYXgvbGF0ZXN0L2ZvbnRzL0hUTUwtQ1NTL1RlWC9vdGYvTWF0aEpheF9TaXplMi1SZWd1bGFyLm90ZicpIGZvcm1hdCgnb3BlbnR5cGUnKQp9CgpAZm9udC1mYWNlIHsKICAgIGZvbnQtZmFtaWx5OiBNSlhjLVRlWC1zaXplMy1SOwogICAgc3JjOiBsb2NhbCgnTWF0aEpheF9TaXplMycpLCBsb2NhbCgnTWF0aEpheF9TaXplMy1SZWd1bGFyJykKfQoKQGZvbnQtZmFjZSB7CiAgICBmb250LWZhbWlseTogTUpYYy1UZVgtc2l6ZTMtUnc7CiAgICBzcmMgLyoxKi86IHVybCgnaHR0cHM6Ly9jZG4ubWF0aGpheC5vcmcvbWF0aGpheC9sYXRlc3QvZm9udHMvSFRNTC1DU1MvVGVYL2VvdC9NYXRoSmF4X1NpemUzLVJlZ3VsYXIuZW90Jyk7CiAgICBzcmMgLyoyKi86IHVybCgnaHR0cHM6Ly9jZG4ubWF0aGpheC5vcmcvbWF0aGpheC9sYXRlc3QvZm9udHMvSFRNTC1DU1MvVGVYL3dvZmYvTWF0aEpheF9TaXplMy1SZWd1bGFyLndvZmYnKSBmb3JtYXQoJ3dvZmYnKSwgdXJsKCdodHRwczovL2Nkbi5tYXRoamF4Lm9yZy9tYXRoamF4L2xhdGVzdC9mb250cy9IVE1MLUNTUy9UZVgvb3RmL01hdGhKYXhfU2l6ZTMtUmVndWxhci5vdGYnKSBmb3JtYXQoJ29wZW50eXBlJykKfQoKQGZvbnQtZmFjZSB7CiAgICBmb250LWZhbWlseTogTUpYYy1UZVgtc2l6ZTQtUjsKICAgIHNyYzogbG9jYWwoJ01hdGhKYXhfU2l6ZTQnKSwgbG9jYWwoJ01hdGhKYXhfU2l6ZTQtUmVndWxhcicpCn0KCkBmb250LWZhY2UgewogICAgZm9udC1mYW1pbHk6IE1KWGMtVGVYLXNpemU0LVJ3OwogICAgc3JjIC8qMSovOiB1cmwoJ2h0dHBzOi8vY2RuLm1hdGhqYXgub3JnL21hdGhqYXgvbGF0ZXN0L2ZvbnRzL0hUTUwtQ1NTL1RlWC9lb3QvTWF0aEpheF9TaXplNC1SZWd1bGFyLmVvdCcpOwogICAgc3JjIC8qMiovOiB1cmwoJ2h0dHBzOi8vY2RuLm1hdGhqYXgub3JnL21hdGhqYXgvbGF0ZXN0L2ZvbnRzL0hUTUwtQ1NTL1RlWC93b2ZmL01hdGhKYXhfU2l6ZTQtUmVndWxhci53b2ZmJykgZm9ybWF0KCd3b2ZmJyksIHVybCgnaHR0cHM6Ly9jZG4ubWF0aGpheC5vcmcvbWF0aGpheC9sYXRlc3QvZm9udHMvSFRNTC1DU1MvVGVYL290Zi9NYXRoSmF4X1NpemU0LVJlZ3VsYXIub3RmJykgZm9ybWF0KCdvcGVudHlwZScpCn0KCkBmb250LWZhY2UgewogICAgZm9udC1mYW1pbHk6IE1KWGMtVGVYLXZlYy1SOwogICAgc3JjOiBsb2NhbCgnTWF0aEpheF9WZWN0b3InKSwgbG9jYWwoJ01hdGhKYXhfVmVjdG9yLVJlZ3VsYXInKQp9CgpAZm9udC1mYWNlIHsKICAgIGZvbnQtZmFtaWx5OiBNSlhjLVRlWC12ZWMtUnc7CiAgICBzcmMgLyoxKi86IHVybCgnaHR0cHM6Ly9jZG4ubWF0aGpheC5vcmcvbWF0aGpheC9sYXRlc3QvZm9udHMvSFRNTC1DU1MvVGVYL2VvdC9NYXRoSmF4X1ZlY3Rvci1SZWd1bGFyLmVvdCcpOwogICAgc3JjIC8qMiovOiB1cmwoJ2h0dHBzOi8vY2RuLm1hdGhqYXgub3JnL21hdGhqYXgvbGF0ZXN0L2ZvbnRzL0hUTUwtQ1NTL1RlWC93b2ZmL01hdGhKYXhfVmVjdG9yLVJlZ3VsYXIud29mZicpIGZvcm1hdCgnd29mZicpLCB1cmwoJ2h0dHBzOi8vY2RuLm1hdGhqYXgub3JnL21hdGhqYXgvbGF0ZXN0L2ZvbnRzL0hUTUwtQ1NTL1RlWC9vdGYvTWF0aEpheF9WZWN0b3ItUmVndWxhci5vdGYnKSBmb3JtYXQoJ29wZW50eXBlJykKfQoKQGZvbnQtZmFjZSB7CiAgICBmb250LWZhbWlseTogTUpYYy1UZVgtdmVjLUI7CiAgICBzcmM6IGxvY2FsKCdNYXRoSmF4X1ZlY3RvciBCb2xkJyksIGxvY2FsKCdNYXRoSmF4X1ZlY3Rvci1Cb2xkJykKfQoKQGZvbnQtZmFjZSB7CiAgICBmb250LWZhbWlseTogTUpYYy1UZVgtdmVjLUJ4OwogICAgc3JjOiBsb2NhbCgnTWF0aEpheF9WZWN0b3InKTsKICAgIGZvbnQtd2VpZ2h0OiBib2xkCn0KCkBmb250LWZhY2UgewogICAgZm9udC1mYW1pbHk6IE1KWGMtVGVYLXZlYy1CdzsKICAgIHNyYyAvKjEqLzogdXJsKCdodHRwczovL2Nkbi5tYXRoamF4Lm9yZy9tYXRoamF4L2xhdGVzdC9mb250cy9IVE1MLUNTUy9UZVgvZW90L01hdGhKYXhfVmVjdG9yLUJvbGQuZW90Jyk7CiAgICBzcmMgLyoyKi86IHVybCgnaHR0cHM6Ly9jZG4ubWF0aGpheC5vcmcvbWF0aGpheC9sYXRlc3QvZm9udHMvSFRNTC1DU1MvVGVYL3dvZmYvTWF0aEpheF9WZWN0b3ItQm9sZC53b2ZmJykgZm9ybWF0KCd3b2ZmJyksIHVybCgnaHR0cHM6Ly9jZG4ubWF0aGpheC5vcmcvbWF0aGpheC9sYXRlc3QvZm9udHMvSFRNTC1DU1MvVGVYL290Zi9NYXRoSmF4X1ZlY3Rvci1Cb2xkLm90ZicpIGZvcm1hdCgnb3BlbnR5cGUnKQp9Cgoud29yZGluZyBkaXYuZXhhbXBsZSB7CglkaXNwbGF5OiBibG9jazsKCW1hcmdpbi10b3A6IDVwdDsKCW1hcmdpbi1ib3R0b206IDVwdDsKCWZvbnQtc2l6ZTogMTFwdDsKCWNvbG9yOiAjYmIwMGJiOwp9Cgoud29yZGluZyBkaXYubm90ZSB7CglkaXNwbGF5OiBibG9jazsKCW1hcmdpbi10b3A6IDVwdDsKCW1hcmdpbi1ib3R0b206IDVwdDsKCWZvbnQtc2l6ZTogMTFwdDsKCWNvbG9yOiAjYmIwMGJiOwp9Cgoud29yZGluZyBkaXYuZXhhbXBsZSB7CglkaXNwbGF5OiBibG9jazsKCW1hcmdpbi10b3A6IDVwdDsKCW1hcmdpbi1ib3R0b206IDVwdDsKCWZvbnQtc2l6ZTogOXB0Owp9Cgoud29yZGluZyBkaXYubm90ZSB7CglkaXNwbGF5OiBibG9jazsKCW1hcmdpbi10b3A6IDVwdDsKCW1hcmdpbi1ib3R0b206IDVwdDsKCWZvbnQtc2l6ZTogOXB0Owp9Cgoud29yZGluZyBkaXYubm90ZSAudGV4dHR0IHsgZm9udC1zaXplOiA5cHQ7IH0KLndvcmRpbmcgZGl2LmV4YW1wbGUgLnRleHR0dCB7IGZvbnQtc2l6ZTogOXB0OyB9Cgoud29yZGluZyBkaXYubm90ZSAudGV4dHNmIHsgZm9udC1mYW1pbHk6ICdOb3RvIFNhbnMnOyBmb250LXNpemU6IDlwdDsgfQoud29yZGluZyBkaXYuZXhhbXBsZSAudGV4dHNmIHsgZm9udC1mYW1pbHk6ICdOb3RvIFNhbnMnOyBmb250LXNpemU6IDlwdDsgfQoKLndvcmRpbmcgZGl2Lm5vdGUgLm1hdGggeyBmb250LXNpemU6IDlwdDsgfQoud29yZGluZyBkaXYuZXhhbXBsZSAubWF0aCB7IGZvbnQtc2l6ZTogOXB0OyB9Cgoud29yZGluZyBhLmZvb3Rub3RlbnVtIHsgZGlzcGxheTogbm9uZTsgfQoud29yZGluZyBkaXYuZm9vdG5vdGUgeyBkaXNwbGF5OiBub25lOyB9Ci53b3JkaW5nIGRpdi5mb290bm90ZVNlcGFyYXRvciB7IGRpc3BsYXk6IG5vbmU7IH0KLndvcmRpbmcgLmZvb3Rub3RlcmVmIHsgZGlzcGxheTogbm9uZTsgfQoKLndvcmRpbmcgZGl2Lm5vbk5vcm1hdGl2ZU9ubHkgeyBkaXNwbGF5OiBub25lOyB9Cgo=">
<link href="https://fonts.googleapis.com/css?family=Noto+Serif" rel='stylesheet'>
<link href="https://fonts.googleapis.com/css?family=Noto+Sans" rel='stylesheet'>
<link href="https://fonts.googleapis.com/css?family=Noto+Sans+Mono" rel='stylesheet'>
<script src="data:text/javascript;base64,LyohCiAgSGlnaGxpZ2h0LmpzIHYxMS45LjAgKGdpdDogYjdlYzRiZmFmYykKICAoYykgMjAwNi0yMDI0IHVuZGVmaW5lZCBhbmQgb3RoZXIgY29udHJpYnV0b3JzCiAgTGljZW5zZTogQlNELTMtQ2xhdXNlCiAqLwp2YXIgaGxqcz1mdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBlKHQpewpyZXR1cm4gdCBpbnN0YW5jZW9mIE1hcD90LmNsZWFyPXQuZGVsZXRlPXQuc2V0PSgpPT57CnRocm93IEVycm9yKCJtYXAgaXMgcmVhZC1vbmx5Iil9OnQgaW5zdGFuY2VvZiBTZXQmJih0LmFkZD10LmNsZWFyPXQuZGVsZXRlPSgpPT57CnRocm93IEVycm9yKCJzZXQgaXMgcmVhZC1vbmx5IikKfSksT2JqZWN0LmZyZWV6ZSh0KSxPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KS5mb3JFYWNoKChuPT57CmNvbnN0IGk9dFtuXSxzPXR5cGVvZiBpOyJvYmplY3QiIT09cyYmImZ1bmN0aW9uIiE9PXN8fE9iamVjdC5pc0Zyb3plbihpKXx8ZShpKQp9KSksdH1jbGFzcyB0e2NvbnN0cnVjdG9yKGUpewp2b2lkIDA9PT1lLmRhdGEmJihlLmRhdGE9e30pLHRoaXMuZGF0YT1lLmRhdGEsdGhpcy5pc01hdGNoSWdub3JlZD0hMX0KaWdub3JlTWF0Y2goKXt0aGlzLmlzTWF0Y2hJZ25vcmVkPSEwfX1mdW5jdGlvbiBuKGUpewpyZXR1cm4gZS5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikucmVwbGFjZSgvIi9nLCImcXVvdDsiKS5yZXBsYWNlKC8nL2csIiYjeDI3OyIpCn1mdW5jdGlvbiBpKGUsLi4udCl7Y29uc3Qgbj1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcihjb25zdCB0IGluIGUpblt0XT1lW3RdCjtyZXR1cm4gdC5mb3JFYWNoKChlPT57Zm9yKGNvbnN0IHQgaW4gZSluW3RdPWVbdF19KSksbn1jb25zdCBzPWU9PiEhZS5zY29wZQo7Y2xhc3Mgb3tjb25zdHJ1Y3RvcihlLHQpewp0aGlzLmJ1ZmZlcj0iIix0aGlzLmNsYXNzUHJlZml4PXQuY2xhc3NQcmVmaXgsZS53YWxrKHRoaXMpfWFkZFRleHQoZSl7CnRoaXMuYnVmZmVyKz1uKGUpfW9wZW5Ob2RlKGUpe2lmKCFzKGUpKXJldHVybjtjb25zdCB0PSgoZSx7cHJlZml4OnR9KT0+ewppZihlLnN0YXJ0c1dpdGgoImxhbmd1YWdlOiIpKXJldHVybiBlLnJlcGxhY2UoImxhbmd1YWdlOiIsImxhbmd1YWdlLSIpCjtpZihlLmluY2x1ZGVzKCIuIikpe2NvbnN0IG49ZS5zcGxpdCgiLiIpCjtyZXR1cm5bYCR7dH0ke24uc2hpZnQoKX1gLC4uLm4ubWFwKCgoZSx0KT0+YCR7ZX0keyJfIi5yZXBlYXQodCsxKX1gKSldLmpvaW4oIiAiKQp9cmV0dXJuYCR7dH0ke2V9YH0pKGUuc2NvcGUse3ByZWZpeDp0aGlzLmNsYXNzUHJlZml4fSk7dGhpcy5zcGFuKHQpfQpjbG9zZU5vZGUoZSl7cyhlKSYmKHRoaXMuYnVmZmVyKz0iPC9zcGFuPiIpfXZhbHVlKCl7cmV0dXJuIHRoaXMuYnVmZmVyfXNwYW4oZSl7CnRoaXMuYnVmZmVyKz1gPHNwYW4gY2xhc3M9IiR7ZX0iPmB9fWNvbnN0IHI9KGU9e30pPT57Y29uc3QgdD17Y2hpbGRyZW46W119CjtyZXR1cm4gT2JqZWN0LmFzc2lnbih0LGUpLHR9O2NsYXNzIGF7Y29uc3RydWN0b3IoKXsKdGhpcy5yb290Tm9kZT1yKCksdGhpcy5zdGFjaz1bdGhpcy5yb290Tm9kZV19Z2V0IHRvcCgpewpyZXR1cm4gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXX1nZXQgcm9vdCgpe3JldHVybiB0aGlzLnJvb3ROb2RlfWFkZChlKXsKdGhpcy50b3AuY2hpbGRyZW4ucHVzaChlKX1vcGVuTm9kZShlKXtjb25zdCB0PXIoe3Njb3BlOmV9KQo7dGhpcy5hZGQodCksdGhpcy5zdGFjay5wdXNoKHQpfWNsb3NlTm9kZSgpewppZih0aGlzLnN0YWNrLmxlbmd0aD4xKXJldHVybiB0aGlzLnN0YWNrLnBvcCgpfWNsb3NlQWxsTm9kZXMoKXsKZm9yKDt0aGlzLmNsb3NlTm9kZSgpOyk7fXRvSlNPTigpe3JldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLnJvb3ROb2RlLG51bGwsNCl9CndhbGsoZSl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuX3dhbGsoZSx0aGlzLnJvb3ROb2RlKX1zdGF0aWMgX3dhbGsoZSx0KXsKcmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P2UuYWRkVGV4dCh0KTp0LmNoaWxkcmVuJiYoZS5vcGVuTm9kZSh0KSwKdC5jaGlsZHJlbi5mb3JFYWNoKCh0PT50aGlzLl93YWxrKGUsdCkpKSxlLmNsb3NlTm9kZSh0KSksZX1zdGF0aWMgX2NvbGxhcHNlKGUpewoic3RyaW5nIiE9dHlwZW9mIGUmJmUuY2hpbGRyZW4mJihlLmNoaWxkcmVuLmV2ZXJ5KChlPT4ic3RyaW5nIj09dHlwZW9mIGUpKT9lLmNoaWxkcmVuPVtlLmNoaWxkcmVuLmpvaW4oIiIpXTplLmNoaWxkcmVuLmZvckVhY2goKGU9PnsKYS5fY29sbGFwc2UoZSl9KSkpfX1jbGFzcyBjIGV4dGVuZHMgYXtjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMub3B0aW9ucz1lfQphZGRUZXh0KGUpeyIiIT09ZSYmdGhpcy5hZGQoZSl9c3RhcnRTY29wZShlKXt0aGlzLm9wZW5Ob2RlKGUpfWVuZFNjb3BlKCl7CnRoaXMuY2xvc2VOb2RlKCl9X19hZGRTdWJsYW5ndWFnZShlLHQpe2NvbnN0IG49ZS5yb290Cjt0JiYobi5zY29wZT0ibGFuZ3VhZ2U6Iit0KSx0aGlzLmFkZChuKX10b0hUTUwoKXsKcmV0dXJuIG5ldyBvKHRoaXMsdGhpcy5vcHRpb25zKS52YWx1ZSgpfWZpbmFsaXplKCl7CnJldHVybiB0aGlzLmNsb3NlQWxsTm9kZXMoKSwhMH19ZnVuY3Rpb24gbChlKXsKcmV0dXJuIGU/InN0cmluZyI9PXR5cGVvZiBlP2U6ZS5zb3VyY2U6bnVsbH1mdW5jdGlvbiBnKGUpe3JldHVybiBoKCIoPz0iLGUsIikiKX0KZnVuY3Rpb24gdShlKXtyZXR1cm4gaCgiKD86IixlLCIpKiIpfWZ1bmN0aW9uIGQoZSl7cmV0dXJuIGgoIig/OiIsZSwiKT8iKX0KZnVuY3Rpb24gaCguLi5lKXtyZXR1cm4gZS5tYXAoKGU9PmwoZSkpKS5qb2luKCIiKX1mdW5jdGlvbiBmKC4uLmUpe2NvbnN0IHQ9KGU9PnsKY29uc3QgdD1lW2UubGVuZ3RoLTFdCjtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJnQuY29uc3RydWN0b3I9PT1PYmplY3Q/KGUuc3BsaWNlKGUubGVuZ3RoLTEsMSksdCk6e30KfSkoZSk7cmV0dXJuIigiKyh0LmNhcHR1cmU/IiI6Ij86IikrZS5tYXAoKGU9PmwoZSkpKS5qb2luKCJ8IikrIikifQpmdW5jdGlvbiBwKGUpe3JldHVybiBSZWdFeHAoZS50b1N0cmluZygpKyJ8IikuZXhlYygiIikubGVuZ3RoLTF9CmNvbnN0IGI9L1xbKD86W15cXFxdXXxcXC4pKlxdfFwoXD8/fFxcKFsxLTldWzAtOV0qKXxcXC4vCjtmdW5jdGlvbiBtKGUse2pvaW5XaXRoOnR9KXtsZXQgbj0wO3JldHVybiBlLm1hcCgoZT0+e24rPTE7Y29uc3QgdD1uCjtsZXQgaT1sKGUpLHM9IiI7Zm9yKDtpLmxlbmd0aD4wOyl7Y29uc3QgZT1iLmV4ZWMoaSk7aWYoIWUpe3MrPWk7YnJlYWt9CnMrPWkuc3Vic3RyaW5nKDAsZS5pbmRleCksCmk9aS5zdWJzdHJpbmcoZS5pbmRleCtlWzBdLmxlbmd0aCksIlxcIj09PWVbMF1bMF0mJmVbMV0/cys9IlxcIisoTnVtYmVyKGVbMV0pK3QpOihzKz1lWzBdLAoiKCI9PT1lWzBdJiZuKyspfXJldHVybiBzfSkpLm1hcCgoZT0+YCgke2V9KWApKS5qb2luKHQpfQpjb25zdCBFPSJbYS16QS1aXVxcdyoiLHg9IlthLXpBLVpfXVxcdyoiLHc9IlxcYlxcZCsoXFwuXFxkKyk/Iix5PSIoLT8pKFxcYjBbeFhdW2EtZkEtRjAtOV0rfChcXGJcXGQrKFxcLlxcZCopP3xcXC5cXGQrKShbZUVdWy0rXT9cXGQrKT8pIixfPSJcXGIoMGJbMDFdKykiLE89ewpiZWdpbjoiXFxcXFtcXHNcXFNdIixyZWxldmFuY2U6MH0sdj17c2NvcGU6InN0cmluZyIsYmVnaW46IiciLGVuZDoiJyIsCmlsbGVnYWw6IlxcbiIsY29udGFpbnM6W09dfSxrPXtzY29wZToic3RyaW5nIixiZWdpbjonIicsZW5kOiciJyxpbGxlZ2FsOiJcXG4iLApjb250YWluczpbT119LE49KGUsdCxuPXt9KT0+e2NvbnN0IHM9aSh7c2NvcGU6ImNvbW1lbnQiLGJlZ2luOmUsZW5kOnQsCmNvbnRhaW5zOltdfSxuKTtzLmNvbnRhaW5zLnB1c2goe3Njb3BlOiJkb2N0YWciLApiZWdpbjoiWyBdKig/PShUT0RPfEZJWE1FfE5PVEV8QlVHfE9QVElNSVpFfEhBQ0t8WFhYKTopIiwKZW5kOi8oVE9ET3xGSVhNRXxOT1RFfEJVR3xPUFRJTUlaRXxIQUNLfFhYWCk6LyxleGNsdWRlQmVnaW46ITAscmVsZXZhbmNlOjB9KQo7Y29uc3Qgbz1mKCJJIiwiYSIsImlzIiwic28iLCJ1cyIsInRvIiwiYXQiLCJpZiIsImluIiwiaXQiLCJvbiIsL1tBLVphLXpdK1snXShkfHZlfHJlfGxsfHR8c3xuKS8sL1tBLVphLXpdK1stXVthLXpdKy8sL1tBLVphLXpdW2Etel17Mix9LykKO3JldHVybiBzLmNvbnRhaW5zLnB1c2goe2JlZ2luOmgoL1sgXSsvLCIoIixvLC9bLl0/WzpdPyhbLl1bIF18WyBdKS8sIil7M30iKX0pLHMKfSxTPU4oIi8vIiwiJCIpLE09TigiL1xcKiIsIlxcKi8iKSxSPU4oIiMiLCIkIik7dmFyIGo9T2JqZWN0LmZyZWV6ZSh7Cl9fcHJvdG9fXzpudWxsLEFQT1NfU1RSSU5HX01PREU6dixCQUNLU0xBU0hfRVNDQVBFOk8sQklOQVJZX05VTUJFUl9NT0RFOnsKc2NvcGU6Im51bWJlciIsYmVnaW46XyxyZWxldmFuY2U6MH0sQklOQVJZX05VTUJFUl9SRTpfLENPTU1FTlQ6TiwKQ19CTE9DS19DT01NRU5UX01PREU6TSxDX0xJTkVfQ09NTUVOVF9NT0RFOlMsQ19OVU1CRVJfTU9ERTp7c2NvcGU6Im51bWJlciIsCmJlZ2luOnkscmVsZXZhbmNlOjB9LENfTlVNQkVSX1JFOnksRU5EX1NBTUVfQVNfQkVHSU46ZT0+T2JqZWN0LmFzc2lnbihlLHsKIm9uOmJlZ2luIjooZSx0KT0+e3QuZGF0YS5fYmVnaW5NYXRjaD1lWzFdfSwib246ZW5kIjooZSx0KT0+ewp0LmRhdGEuX2JlZ2luTWF0Y2ghPT1lWzFdJiZ0Lmlnbm9yZU1hdGNoKCl9fSksSEFTSF9DT01NRU5UX01PREU6UixJREVOVF9SRTpFLApNQVRDSF9OT1RISU5HX1JFOi9cYlxCLyxNRVRIT0RfR1VBUkQ6e2JlZ2luOiJcXC5cXHMqIit4LHJlbGV2YW5jZTowfSwKTlVNQkVSX01PREU6e3Njb3BlOiJudW1iZXIiLGJlZ2luOncscmVsZXZhbmNlOjB9LE5VTUJFUl9SRTp3LApQSFJBU0FMX1dPUkRTX01PREU6ewpiZWdpbjovXGIoYXxhbnx0aGV8YXJlfEknbXxpc24ndHxkb24ndHxkb2Vzbid0fHdvbid0fGJ1dHxqdXN0fHNob3VsZHxwcmV0dHl8c2ltcGx5fGVub3VnaHxnb25uYXxnb2luZ3x3dGZ8c298c3VjaHx3aWxsfHlvdXx5b3VyfHRoZXl8bGlrZXxtb3JlKVxiLwp9LFFVT1RFX1NUUklOR19NT0RFOmssUkVHRVhQX01PREU6e3Njb3BlOiJyZWdleHAiLGJlZ2luOi9cLyg/PVteL1xuXSpcLykvLAplbmQ6L1wvW2dpbXV5XSovLGNvbnRhaW5zOltPLHtiZWdpbjovXFsvLGVuZDovXF0vLHJlbGV2YW5jZTowLGNvbnRhaW5zOltPXX1dfSwKUkVfU1RBUlRFUlNfUkU6IiF8IT18IT09fCV8JT18JnwmJnwmPXxcXCp8XFwqPXxcXCt8XFwrPXwsfC18LT18Lz18L3w6fDt8PDx8PDw9fDw9fDx8PT09fD09fD18Pj4+PXw+Pj18Pj18Pj4+fD4+fD58XFw/fFxcW3xcXHt8XFwofFxcXnxcXF49fFxcfHxcXHw9fFxcfFxcfHx+IiwKU0hFQkFORzooZT17fSk9Pntjb25zdCB0PS9eIyFbIF0qXC8vCjtyZXR1cm4gZS5iaW5hcnkmJihlLmJlZ2luPWgodCwvLipcYi8sZS5iaW5hcnksL1xiLiovKSksaSh7c2NvcGU6Im1ldGEiLGJlZ2luOnQsCmVuZDovJC8scmVsZXZhbmNlOjAsIm9uOmJlZ2luIjooZSx0KT0+ezAhPT1lLmluZGV4JiZ0Lmlnbm9yZU1hdGNoKCl9fSxlKX0sClRJVExFX01PREU6e3Njb3BlOiJ0aXRsZSIsYmVnaW46RSxyZWxldmFuY2U6MH0sVU5ERVJTQ09SRV9JREVOVF9SRTp4LApVTkRFUlNDT1JFX1RJVExFX01PREU6e3Njb3BlOiJ0aXRsZSIsYmVnaW46eCxyZWxldmFuY2U6MH19KTtmdW5jdGlvbiBBKGUsdCl7CiIuIj09PWUuaW5wdXRbZS5pbmRleC0xXSYmdC5pZ25vcmVNYXRjaCgpfWZ1bmN0aW9uIEkoZSx0KXsKdm9pZCAwIT09ZS5jbGFzc05hbWUmJihlLnNjb3BlPWUuY2xhc3NOYW1lLGRlbGV0ZSBlLmNsYXNzTmFtZSl9ZnVuY3Rpb24gVChlLHQpewp0JiZlLmJlZ2luS2V5d29yZHMmJihlLmJlZ2luPSJcXGIoIitlLmJlZ2luS2V5d29yZHMuc3BsaXQoIiAiKS5qb2luKCJ8IikrIikoPyFcXC4pKD89XFxifFxccykiLAplLl9fYmVmb3JlQmVnaW49QSxlLmtleXdvcmRzPWUua2V5d29yZHN8fGUuYmVnaW5LZXl3b3JkcyxkZWxldGUgZS5iZWdpbktleXdvcmRzLAp2b2lkIDA9PT1lLnJlbGV2YW5jZSYmKGUucmVsZXZhbmNlPTApKX1mdW5jdGlvbiBMKGUsdCl7CkFycmF5LmlzQXJyYXkoZS5pbGxlZ2FsKSYmKGUuaWxsZWdhbD1mKC4uLmUuaWxsZWdhbCkpfWZ1bmN0aW9uIEIoZSx0KXsKaWYoZS5tYXRjaCl7CmlmKGUuYmVnaW58fGUuZW5kKXRocm93IEVycm9yKCJiZWdpbiAmIGVuZCBhcmUgbm90IHN1cHBvcnRlZCB3aXRoIG1hdGNoIikKO2UuYmVnaW49ZS5tYXRjaCxkZWxldGUgZS5tYXRjaH19ZnVuY3Rpb24gUChlLHQpewp2b2lkIDA9PT1lLnJlbGV2YW5jZSYmKGUucmVsZXZhbmNlPTEpfWNvbnN0IEQ9KGUsdCk9PntpZighZS5iZWZvcmVNYXRjaClyZXR1cm4KO2lmKGUuc3RhcnRzKXRocm93IEVycm9yKCJiZWZvcmVNYXRjaCBjYW5ub3QgYmUgdXNlZCB3aXRoIHN0YXJ0cyIpCjtjb25zdCBuPU9iamVjdC5hc3NpZ24oe30sZSk7T2JqZWN0LmtleXMoZSkuZm9yRWFjaCgodD0+e2RlbGV0ZSBlW3RdCn0pKSxlLmtleXdvcmRzPW4ua2V5d29yZHMsZS5iZWdpbj1oKG4uYmVmb3JlTWF0Y2gsZyhuLmJlZ2luKSksZS5zdGFydHM9ewpyZWxldmFuY2U6MCxjb250YWluczpbT2JqZWN0LmFzc2lnbihuLHtlbmRzUGFyZW50OiEwfSldCn0sZS5yZWxldmFuY2U9MCxkZWxldGUgbi5iZWZvcmVNYXRjaAp9LEg9WyJvZiIsImFuZCIsImZvciIsImluIiwibm90Iiwib3IiLCJpZiIsInRoZW4iLCJwYXJlbnQiLCJsaXN0IiwidmFsdWUiXSxDPSJrZXl3b3JkIgo7ZnVuY3Rpb24gJChlLHQsbj1DKXtjb25zdCBpPU9iamVjdC5jcmVhdGUobnVsbCkKO3JldHVybiJzdHJpbmciPT10eXBlb2YgZT9zKG4sZS5zcGxpdCgiICIpKTpBcnJheS5pc0FycmF5KGUpP3MobixlKTpPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChuPT57Ck9iamVjdC5hc3NpZ24oaSwkKGVbbl0sdCxuKSl9KSksaTtmdW5jdGlvbiBzKGUsbil7CnQmJihuPW4ubWFwKChlPT5lLnRvTG93ZXJDYXNlKCkpKSksbi5mb3JFYWNoKCh0PT57Y29uc3Qgbj10LnNwbGl0KCJ8IikKO2lbblswXV09W2UsVShuWzBdLG5bMV0pXX0pKX19ZnVuY3Rpb24gVShlLHQpewpyZXR1cm4gdD9OdW1iZXIodCk6KGU9PkguaW5jbHVkZXMoZS50b0xvd2VyQ2FzZSgpKSkoZSk/MDoxfWNvbnN0IHo9e30sVz1lPT57CmNvbnNvbGUuZXJyb3IoZSl9LFg9KGUsLi4udCk9Pntjb25zb2xlLmxvZygiV0FSTjogIitlLC4uLnQpfSxHPShlLHQpPT57CnpbYCR7ZX0vJHt0fWBdfHwoY29uc29sZS5sb2coYERlcHJlY2F0ZWQgYXMgb2YgJHtlfS4gJHt0fWApLHpbYCR7ZX0vJHt0fWBdPSEwKQp9LEs9RXJyb3IoKTtmdW5jdGlvbiBGKGUsdCx7a2V5Om59KXtsZXQgaT0wO2NvbnN0IHM9ZVtuXSxvPXt9LHI9e30KO2ZvcihsZXQgZT0xO2U8PXQubGVuZ3RoO2UrKylyW2UraV09c1tlXSxvW2UraV09ITAsaSs9cCh0W2UtMV0pCjtlW25dPXIsZVtuXS5fZW1pdD1vLGVbbl0uX211bHRpPSEwfWZ1bmN0aW9uIFooZSl7KGU9PnsKZS5zY29wZSYmIm9iamVjdCI9PXR5cGVvZiBlLnNjb3BlJiZudWxsIT09ZS5zY29wZSYmKGUuYmVnaW5TY29wZT1lLnNjb3BlLApkZWxldGUgZS5zY29wZSl9KShlKSwic3RyaW5nIj09dHlwZW9mIGUuYmVnaW5TY29wZSYmKGUuYmVnaW5TY29wZT17Cl93cmFwOmUuYmVnaW5TY29wZX0pLCJzdHJpbmciPT10eXBlb2YgZS5lbmRTY29wZSYmKGUuZW5kU2NvcGU9e193cmFwOmUuZW5kU2NvcGUKfSksKGU9PntpZihBcnJheS5pc0FycmF5KGUuYmVnaW4pKXsKaWYoZS5za2lwfHxlLmV4Y2x1ZGVCZWdpbnx8ZS5yZXR1cm5CZWdpbil0aHJvdyBXKCJza2lwLCBleGNsdWRlQmVnaW4sIHJldHVybkJlZ2luIG5vdCBjb21wYXRpYmxlIHdpdGggYmVnaW5TY29wZToge30iKSwKSwo7aWYoIm9iamVjdCIhPXR5cGVvZiBlLmJlZ2luU2NvcGV8fG51bGw9PT1lLmJlZ2luU2NvcGUpdGhyb3cgVygiYmVnaW5TY29wZSBtdXN0IGJlIG9iamVjdCIpLApLO0YoZSxlLmJlZ2luLHtrZXk6ImJlZ2luU2NvcGUifSksZS5iZWdpbj1tKGUuYmVnaW4se2pvaW5XaXRoOiIifSl9fSkoZSksKGU9PnsKaWYoQXJyYXkuaXNBcnJheShlLmVuZCkpewppZihlLnNraXB8fGUuZXhjbHVkZUVuZHx8ZS5yZXR1cm5FbmQpdGhyb3cgVygic2tpcCwgZXhjbHVkZUVuZCwgcmV0dXJuRW5kIG5vdCBjb21wYXRpYmxlIHdpdGggZW5kU2NvcGU6IHt9IiksCksKO2lmKCJvYmplY3QiIT10eXBlb2YgZS5lbmRTY29wZXx8bnVsbD09PWUuZW5kU2NvcGUpdGhyb3cgVygiZW5kU2NvcGUgbXVzdCBiZSBvYmplY3QiKSwKSztGKGUsZS5lbmQse2tleToiZW5kU2NvcGUifSksZS5lbmQ9bShlLmVuZCx7am9pbldpdGg6IiJ9KX19KShlKX1mdW5jdGlvbiBWKGUpewpmdW5jdGlvbiB0KHQsbil7CnJldHVybiBSZWdFeHAobCh0KSwibSIrKGUuY2FzZV9pbnNlbnNpdGl2ZT8iaSI6IiIpKyhlLnVuaWNvZGVSZWdleD8idSI6IiIpKyhuPyJnIjoiIikpCn1jbGFzcyBue2NvbnN0cnVjdG9yKCl7CnRoaXMubWF0Y2hJbmRleGVzPXt9LHRoaXMucmVnZXhlcz1bXSx0aGlzLm1hdGNoQXQ9MSx0aGlzLnBvc2l0aW9uPTB9CmFkZFJ1bGUoZSx0KXsKdC5wb3NpdGlvbj10aGlzLnBvc2l0aW9uKyssdGhpcy5tYXRjaEluZGV4ZXNbdGhpcy5tYXRjaEF0XT10LHRoaXMucmVnZXhlcy5wdXNoKFt0LGVdKSwKdGhpcy5tYXRjaEF0Kz1wKGUpKzF9Y29tcGlsZSgpezA9PT10aGlzLnJlZ2V4ZXMubGVuZ3RoJiYodGhpcy5leGVjPSgpPT5udWxsKQo7Y29uc3QgZT10aGlzLnJlZ2V4ZXMubWFwKChlPT5lWzFdKSk7dGhpcy5tYXRjaGVyUmU9dChtKGUse2pvaW5XaXRoOiJ8Igp9KSwhMCksdGhpcy5sYXN0SW5kZXg9MH1leGVjKGUpe3RoaXMubWF0Y2hlclJlLmxhc3RJbmRleD10aGlzLmxhc3RJbmRleAo7Y29uc3QgdD10aGlzLm1hdGNoZXJSZS5leGVjKGUpO2lmKCF0KXJldHVybiBudWxsCjtjb25zdCBuPXQuZmluZEluZGV4KCgoZSx0KT0+dD4wJiZ2b2lkIDAhPT1lKSksaT10aGlzLm1hdGNoSW5kZXhlc1tuXQo7cmV0dXJuIHQuc3BsaWNlKDAsbiksT2JqZWN0LmFzc2lnbih0LGkpfX1jbGFzcyBze2NvbnN0cnVjdG9yKCl7CnRoaXMucnVsZXM9W10sdGhpcy5tdWx0aVJlZ2V4ZXM9W10sCnRoaXMuY291bnQ9MCx0aGlzLmxhc3RJbmRleD0wLHRoaXMucmVnZXhJbmRleD0wfWdldE1hdGNoZXIoZSl7CmlmKHRoaXMubXVsdGlSZWdleGVzW2VdKXJldHVybiB0aGlzLm11bHRpUmVnZXhlc1tlXTtjb25zdCB0PW5ldyBuCjtyZXR1cm4gdGhpcy5ydWxlcy5zbGljZShlKS5mb3JFYWNoKCgoW2Usbl0pPT50LmFkZFJ1bGUoZSxuKSkpLAp0LmNvbXBpbGUoKSx0aGlzLm11bHRpUmVnZXhlc1tlXT10LHR9cmVzdW1pbmdTY2FuQXRTYW1lUG9zaXRpb24oKXsKcmV0dXJuIDAhPT10aGlzLnJlZ2V4SW5kZXh9Y29uc2lkZXJBbGwoKXt0aGlzLnJlZ2V4SW5kZXg9MH1hZGRSdWxlKGUsdCl7CnRoaXMucnVsZXMucHVzaChbZSx0XSksImJlZ2luIj09PXQudHlwZSYmdGhpcy5jb3VudCsrfWV4ZWMoZSl7CmNvbnN0IHQ9dGhpcy5nZXRNYXRjaGVyKHRoaXMucmVnZXhJbmRleCk7dC5sYXN0SW5kZXg9dGhpcy5sYXN0SW5kZXgKO2xldCBuPXQuZXhlYyhlKQo7aWYodGhpcy5yZXN1bWluZ1NjYW5BdFNhbWVQb3NpdGlvbigpKWlmKG4mJm4uaW5kZXg9PT10aGlzLmxhc3RJbmRleCk7ZWxzZXsKY29uc3QgdD10aGlzLmdldE1hdGNoZXIoMCk7dC5sYXN0SW5kZXg9dGhpcy5sYXN0SW5kZXgrMSxuPXQuZXhlYyhlKX0KcmV0dXJuIG4mJih0aGlzLnJlZ2V4SW5kZXgrPW4ucG9zaXRpb24rMSwKdGhpcy5yZWdleEluZGV4PT09dGhpcy5jb3VudCYmdGhpcy5jb25zaWRlckFsbCgpKSxufX0KaWYoZS5jb21waWxlckV4dGVuc2lvbnN8fChlLmNvbXBpbGVyRXh0ZW5zaW9ucz1bXSksCmUuY29udGFpbnMmJmUuY29udGFpbnMuaW5jbHVkZXMoInNlbGYiKSl0aHJvdyBFcnJvcigiRVJSOiBjb250YWlucyBgc2VsZmAgaXMgbm90IHN1cHBvcnRlZCBhdCB0aGUgdG9wLWxldmVsIG9mIGEgbGFuZ3VhZ2UuICBTZWUgZG9jdW1lbnRhdGlvbi4iKQo7cmV0dXJuIGUuY2xhc3NOYW1lQWxpYXNlcz1pKGUuY2xhc3NOYW1lQWxpYXNlc3x8e30pLGZ1bmN0aW9uIG4obyxyKXtjb25zdCBhPW8KO2lmKG8uaXNDb21waWxlZClyZXR1cm4gYQo7W0ksQixaLERdLmZvckVhY2goKGU9PmUobyxyKSkpLGUuY29tcGlsZXJFeHRlbnNpb25zLmZvckVhY2goKGU9PmUobyxyKSkpLApvLl9fYmVmb3JlQmVnaW49bnVsbCxbVCxMLFBdLmZvckVhY2goKGU9PmUobyxyKSkpLG8uaXNDb21waWxlZD0hMDtsZXQgYz1udWxsCjtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIG8ua2V5d29yZHMmJm8ua2V5d29yZHMuJHBhdHRlcm4mJihvLmtleXdvcmRzPU9iamVjdC5hc3NpZ24oe30sby5rZXl3b3JkcyksCmM9by5rZXl3b3Jkcy4kcGF0dGVybiwKZGVsZXRlIG8ua2V5d29yZHMuJHBhdHRlcm4pLGM9Y3x8L1x3Ky8sby5rZXl3b3JkcyYmKG8ua2V5d29yZHM9JChvLmtleXdvcmRzLGUuY2FzZV9pbnNlbnNpdGl2ZSkpLAphLmtleXdvcmRQYXR0ZXJuUmU9dChjLCEwKSwKciYmKG8uYmVnaW58fChvLmJlZ2luPS9cQnxcYi8pLGEuYmVnaW5SZT10KGEuYmVnaW4pLG8uZW5kfHxvLmVuZHNXaXRoUGFyZW50fHwoby5lbmQ9L1xCfFxiLyksCm8uZW5kJiYoYS5lbmRSZT10KGEuZW5kKSksCmEudGVybWluYXRvckVuZD1sKGEuZW5kKXx8IiIsby5lbmRzV2l0aFBhcmVudCYmci50ZXJtaW5hdG9yRW5kJiYoYS50ZXJtaW5hdG9yRW5kKz0oby5lbmQ/InwiOiIiKStyLnRlcm1pbmF0b3JFbmQpKSwKby5pbGxlZ2FsJiYoYS5pbGxlZ2FsUmU9dChvLmlsbGVnYWwpKSwKby5jb250YWluc3x8KG8uY29udGFpbnM9W10pLG8uY29udGFpbnM9W10uY29uY2F0KC4uLm8uY29udGFpbnMubWFwKChlPT4oZT0+KGUudmFyaWFudHMmJiFlLmNhY2hlZFZhcmlhbnRzJiYoZS5jYWNoZWRWYXJpYW50cz1lLnZhcmlhbnRzLm1hcCgodD0+aShlLHsKdmFyaWFudHM6bnVsbH0sdCkpKSksZS5jYWNoZWRWYXJpYW50cz9lLmNhY2hlZFZhcmlhbnRzOnEoZSk/aShlLHsKc3RhcnRzOmUuc3RhcnRzP2koZS5zdGFydHMpOm51bGwKfSk6T2JqZWN0LmlzRnJvemVuKGUpP2koZSk6ZSkpKCJzZWxmIj09PWU/bzplKSkpKSxvLmNvbnRhaW5zLmZvckVhY2goKGU9PntuKGUsYSkKfSkpLG8uc3RhcnRzJiZuKG8uc3RhcnRzLHIpLGEubWF0Y2hlcj0oZT0+e2NvbnN0IHQ9bmV3IHMKO3JldHVybiBlLmNvbnRhaW5zLmZvckVhY2goKGU9PnQuYWRkUnVsZShlLmJlZ2luLHtydWxlOmUsdHlwZToiYmVnaW4iCn0pKSksZS50ZXJtaW5hdG9yRW5kJiZ0LmFkZFJ1bGUoZS50ZXJtaW5hdG9yRW5kLHt0eXBlOiJlbmQiCn0pLGUuaWxsZWdhbCYmdC5hZGRSdWxlKGUuaWxsZWdhbCx7dHlwZToiaWxsZWdhbCJ9KSx0fSkoYSksYX0oZSl9ZnVuY3Rpb24gcShlKXsKcmV0dXJuISFlJiYoZS5lbmRzV2l0aFBhcmVudHx8cShlLnN0YXJ0cykpfWNsYXNzIEogZXh0ZW5kcyBFcnJvcnsKY29uc3RydWN0b3IoZSx0KXtzdXBlcihlKSx0aGlzLm5hbWU9IkhUTUxJbmplY3Rpb25FcnJvciIsdGhpcy5odG1sPXR9fQpjb25zdCBZPW4sUT1pLGVlPVN5bWJvbCgibm9tYXRjaCIpLHRlPW49PnsKY29uc3QgaT1PYmplY3QuY3JlYXRlKG51bGwpLHM9T2JqZWN0LmNyZWF0ZShudWxsKSxvPVtdO2xldCByPSEwCjtjb25zdCBhPSJDb3VsZCBub3QgZmluZCB0aGUgbGFuZ3VhZ2UgJ3t9JywgZGlkIHlvdSBmb3JnZXQgdG8gbG9hZC9pbmNsdWRlIGEgbGFuZ3VhZ2UgbW9kdWxlPyIsbD17CmRpc2FibGVBdXRvZGV0ZWN0OiEwLG5hbWU6IlBsYWluIHRleHQiLGNvbnRhaW5zOltdfTtsZXQgcD17Cmlnbm9yZVVuZXNjYXBlZEhUTUw6ITEsdGhyb3dVbmVzY2FwZWRIVE1MOiExLG5vSGlnaGxpZ2h0UmU6L14obm8tP2hpZ2hsaWdodCkkL2ksCmxhbmd1YWdlRGV0ZWN0UmU6L1xibGFuZyg/OnVhZ2UpPy0oW1x3LV0rKVxiL2ksY2xhc3NQcmVmaXg6ImhsanMtIiwKY3NzU2VsZWN0b3I6InByZSBjb2RlIixsYW5ndWFnZXM6bnVsbCxfX2VtaXR0ZXI6Y307ZnVuY3Rpb24gYihlKXsKcmV0dXJuIHAubm9IaWdobGlnaHRSZS50ZXN0KGUpfWZ1bmN0aW9uIG0oZSx0LG4pe2xldCBpPSIiLHM9IiIKOyJvYmplY3QiPT10eXBlb2YgdD8oaT1lLApuPXQuaWdub3JlSWxsZWdhbHMscz10Lmxhbmd1YWdlKTooRygiMTAuNy4wIiwiaGlnaGxpZ2h0KGxhbmcsIGNvZGUsIC4uLmFyZ3MpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIiksCkcoIjEwLjcuMCIsIlBsZWFzZSB1c2UgaGlnaGxpZ2h0KGNvZGUsIG9wdGlvbnMpIGluc3RlYWQuXG5odHRwczovL2dpdGh1Yi5jb20vaGlnaGxpZ2h0anMvaGlnaGxpZ2h0LmpzL2lzc3Vlcy8yMjc3IiksCnM9ZSxpPXQpLHZvaWQgMD09PW4mJihuPSEwKTtjb25zdCBvPXtjb2RlOmksbGFuZ3VhZ2U6c307TigiYmVmb3JlOmhpZ2hsaWdodCIsbykKO2NvbnN0IHI9by5yZXN1bHQ/by5yZXN1bHQ6RShvLmxhbmd1YWdlLG8uY29kZSxuKQo7cmV0dXJuIHIuY29kZT1vLmNvZGUsTigiYWZ0ZXI6aGlnaGxpZ2h0IixyKSxyfWZ1bmN0aW9uIEUoZSxuLHMsbyl7CmNvbnN0IGM9T2JqZWN0LmNyZWF0ZShudWxsKTtmdW5jdGlvbiBsKCl7aWYoIU4ua2V5d29yZHMpcmV0dXJuIHZvaWQgTS5hZGRUZXh0KFIpCjtsZXQgZT0wO04ua2V5d29yZFBhdHRlcm5SZS5sYXN0SW5kZXg9MDtsZXQgdD1OLmtleXdvcmRQYXR0ZXJuUmUuZXhlYyhSKSxuPSIiCjtmb3IoO3Q7KXtuKz1SLnN1YnN0cmluZyhlLHQuaW5kZXgpCjtjb25zdCBzPV8uY2FzZV9pbnNlbnNpdGl2ZT90WzBdLnRvTG93ZXJDYXNlKCk6dFswXSxvPShpPXMsTi5rZXl3b3Jkc1tpXSk7aWYobyl7CmNvbnN0W2UsaV09bwo7aWYoTS5hZGRUZXh0KG4pLG49IiIsY1tzXT0oY1tzXXx8MCkrMSxjW3NdPD03JiYoais9aSksZS5zdGFydHNXaXRoKCJfIikpbis9dFswXTtlbHNlewpjb25zdCBuPV8uY2xhc3NOYW1lQWxpYXNlc1tlXXx8ZTt1KHRbMF0sbil9fWVsc2Ugbis9dFswXQo7ZT1OLmtleXdvcmRQYXR0ZXJuUmUubGFzdEluZGV4LHQ9Ti5rZXl3b3JkUGF0dGVyblJlLmV4ZWMoUil9dmFyIGkKO24rPVIuc3Vic3RyaW5nKGUpLE0uYWRkVGV4dChuKX1mdW5jdGlvbiBnKCl7bnVsbCE9Ti5zdWJMYW5ndWFnZT8oKCk9PnsKaWYoIiI9PT1SKXJldHVybjtsZXQgZT1udWxsO2lmKCJzdHJpbmciPT10eXBlb2YgTi5zdWJMYW5ndWFnZSl7CmlmKCFpW04uc3ViTGFuZ3VhZ2VdKXJldHVybiB2b2lkIE0uYWRkVGV4dChSKQo7ZT1FKE4uc3ViTGFuZ3VhZ2UsUiwhMCxTW04uc3ViTGFuZ3VhZ2VdKSxTW04uc3ViTGFuZ3VhZ2VdPWUuX3RvcAp9ZWxzZSBlPXgoUixOLnN1Ykxhbmd1YWdlLmxlbmd0aD9OLnN1Ykxhbmd1YWdlOm51bGwpCjtOLnJlbGV2YW5jZT4wJiYoais9ZS5yZWxldmFuY2UpLE0uX19hZGRTdWJsYW5ndWFnZShlLl9lbWl0dGVyLGUubGFuZ3VhZ2UpCn0pKCk6bCgpLFI9IiJ9ZnVuY3Rpb24gdShlLHQpewoiIiE9PWUmJihNLnN0YXJ0U2NvcGUodCksTS5hZGRUZXh0KGUpLE0uZW5kU2NvcGUoKSl9ZnVuY3Rpb24gZChlLHQpe2xldCBuPTEKO2NvbnN0IGk9dC5sZW5ndGgtMTtmb3IoO248PWk7KXtpZighZS5fZW1pdFtuXSl7bisrO2NvbnRpbnVlfQpjb25zdCBpPV8uY2xhc3NOYW1lQWxpYXNlc1tlW25dXXx8ZVtuXSxzPXRbbl07aT91KHMsaSk6KFI9cyxsKCksUj0iIiksbisrfX0KZnVuY3Rpb24gaChlLHQpewpyZXR1cm4gZS5zY29wZSYmInN0cmluZyI9PXR5cGVvZiBlLnNjb3BlJiZNLm9wZW5Ob2RlKF8uY2xhc3NOYW1lQWxpYXNlc1tlLnNjb3BlXXx8ZS5zY29wZSksCmUuYmVnaW5TY29wZSYmKGUuYmVnaW5TY29wZS5fd3JhcD8odShSLF8uY2xhc3NOYW1lQWxpYXNlc1tlLmJlZ2luU2NvcGUuX3dyYXBdfHxlLmJlZ2luU2NvcGUuX3dyYXApLApSPSIiKTplLmJlZ2luU2NvcGUuX211bHRpJiYoZChlLmJlZ2luU2NvcGUsdCksUj0iIikpLE49T2JqZWN0LmNyZWF0ZShlLHtwYXJlbnQ6ewp2YWx1ZTpOfX0pLE59ZnVuY3Rpb24gZihlLG4saSl7bGV0IHM9KChlLHQpPT57Y29uc3Qgbj1lJiZlLmV4ZWModCkKO3JldHVybiBuJiYwPT09bi5pbmRleH0pKGUuZW5kUmUsaSk7aWYocyl7aWYoZVsib246ZW5kIl0pe2NvbnN0IGk9bmV3IHQoZSkKO2VbIm9uOmVuZCJdKG4saSksaS5pc01hdGNoSWdub3JlZCYmKHM9ITEpfWlmKHMpewpmb3IoO2UuZW5kc1BhcmVudCYmZS5wYXJlbnQ7KWU9ZS5wYXJlbnQ7cmV0dXJuIGV9fQppZihlLmVuZHNXaXRoUGFyZW50KXJldHVybiBmKGUucGFyZW50LG4saSl9ZnVuY3Rpb24gYihlKXsKcmV0dXJuIDA9PT1OLm1hdGNoZXIucmVnZXhJbmRleD8oUis9ZVswXSwxKTooVD0hMCwwKX1mdW5jdGlvbiBtKGUpewpjb25zdCB0PWVbMF0saT1uLnN1YnN0cmluZyhlLmluZGV4KSxzPWYoTixlLGkpO2lmKCFzKXJldHVybiBlZTtjb25zdCBvPU4KO04uZW5kU2NvcGUmJk4uZW5kU2NvcGUuX3dyYXA/KGcoKSwKdSh0LE4uZW5kU2NvcGUuX3dyYXApKTpOLmVuZFNjb3BlJiZOLmVuZFNjb3BlLl9tdWx0aT8oZygpLApkKE4uZW5kU2NvcGUsZSkpOm8uc2tpcD9SKz10OihvLnJldHVybkVuZHx8by5leGNsdWRlRW5kfHwoUis9dCksCmcoKSxvLmV4Y2x1ZGVFbmQmJihSPXQpKTtkb3sKTi5zY29wZSYmTS5jbG9zZU5vZGUoKSxOLnNraXB8fE4uc3ViTGFuZ3VhZ2V8fChqKz1OLnJlbGV2YW5jZSksTj1OLnBhcmVudAp9d2hpbGUoTiE9PXMucGFyZW50KTtyZXR1cm4gcy5zdGFydHMmJmgocy5zdGFydHMsZSksby5yZXR1cm5FbmQ/MDp0Lmxlbmd0aH0KbGV0IHc9e307ZnVuY3Rpb24geShpLG8pe2NvbnN0IGE9byYmb1swXTtpZihSKz1pLG51bGw9PWEpcmV0dXJuIGcoKSwwCjtpZigiYmVnaW4iPT09dy50eXBlJiYiZW5kIj09PW8udHlwZSYmdy5pbmRleD09PW8uaW5kZXgmJiIiPT09YSl7CmlmKFIrPW4uc2xpY2Uoby5pbmRleCxvLmluZGV4KzEpLCFyKXtjb25zdCB0PUVycm9yKGAwIHdpZHRoIG1hdGNoIHJlZ2V4ICgke2V9KWApCjt0aHJvdyB0Lmxhbmd1YWdlTmFtZT1lLHQuYmFkUnVsZT13LnJ1bGUsdH1yZXR1cm4gMX0KaWYodz1vLCJiZWdpbiI9PT1vLnR5cGUpcmV0dXJuKGU9PnsKY29uc3Qgbj1lWzBdLGk9ZS5ydWxlLHM9bmV3IHQoaSksbz1baS5fX2JlZm9yZUJlZ2luLGlbIm9uOmJlZ2luIl1dCjtmb3IoY29uc3QgdCBvZiBvKWlmKHQmJih0KGUscykscy5pc01hdGNoSWdub3JlZCkpcmV0dXJuIGIobikKO3JldHVybiBpLnNraXA/Uis9bjooaS5leGNsdWRlQmVnaW4mJihSKz1uKSwKZygpLGkucmV0dXJuQmVnaW58fGkuZXhjbHVkZUJlZ2lufHwoUj1uKSksaChpLGUpLGkucmV0dXJuQmVnaW4/MDpuLmxlbmd0aH0pKG8pCjtpZigiaWxsZWdhbCI9PT1vLnR5cGUmJiFzKXsKY29uc3QgZT1FcnJvcignSWxsZWdhbCBsZXhlbWUgIicrYSsnIiBmb3IgbW9kZSAiJysoTi5zY29wZXx8Ijx1bm5hbWVkPiIpKyciJykKO3Rocm93IGUubW9kZT1OLGV9aWYoImVuZCI9PT1vLnR5cGUpe2NvbnN0IGU9bShvKTtpZihlIT09ZWUpcmV0dXJuIGV9CmlmKCJpbGxlZ2FsIj09PW8udHlwZSYmIiI9PT1hKXJldHVybiAxCjtpZihJPjFlNSYmST4zKm8uaW5kZXgpdGhyb3cgRXJyb3IoInBvdGVudGlhbCBpbmZpbml0ZSBsb29wLCB3YXkgbW9yZSBpdGVyYXRpb25zIHRoYW4gbWF0Y2hlcyIpCjtyZXR1cm4gUis9YSxhLmxlbmd0aH1jb25zdCBfPU8oZSkKO2lmKCFfKXRocm93IFcoYS5yZXBsYWNlKCJ7fSIsZSkpLEVycm9yKCdVbmtub3duIGxhbmd1YWdlOiAiJytlKyciJykKO2NvbnN0IHY9VihfKTtsZXQgaz0iIixOPW98fHY7Y29uc3QgUz17fSxNPW5ldyBwLl9fZW1pdHRlcihwKTsoKCk9Pntjb25zdCBlPVtdCjtmb3IobGV0IHQ9Tjt0IT09Xzt0PXQucGFyZW50KXQuc2NvcGUmJmUudW5zaGlmdCh0LnNjb3BlKQo7ZS5mb3JFYWNoKChlPT5NLm9wZW5Ob2RlKGUpKSl9KSgpO2xldCBSPSIiLGo9MCxBPTAsST0wLFQ9ITE7dHJ5ewppZihfLl9fZW1pdFRva2VucylfLl9fZW1pdFRva2VucyhuLE0pO2Vsc2V7Zm9yKE4ubWF0Y2hlci5jb25zaWRlckFsbCgpOzspewpJKyssVD9UPSExOk4ubWF0Y2hlci5jb25zaWRlckFsbCgpLE4ubWF0Y2hlci5sYXN0SW5kZXg9QQo7Y29uc3QgZT1OLm1hdGNoZXIuZXhlYyhuKTtpZighZSlicmVhaztjb25zdCB0PXkobi5zdWJzdHJpbmcoQSxlLmluZGV4KSxlKQo7QT1lLmluZGV4K3R9eShuLnN1YnN0cmluZyhBKSl9cmV0dXJuIE0uZmluYWxpemUoKSxrPU0udG9IVE1MKCkse2xhbmd1YWdlOmUsCnZhbHVlOmsscmVsZXZhbmNlOmosaWxsZWdhbDohMSxfZW1pdHRlcjpNLF90b3A6Tn19Y2F0Y2godCl7CmlmKHQubWVzc2FnZSYmdC5tZXNzYWdlLmluY2x1ZGVzKCJJbGxlZ2FsIikpcmV0dXJue2xhbmd1YWdlOmUsdmFsdWU6WShuKSwKaWxsZWdhbDohMCxyZWxldmFuY2U6MCxfaWxsZWdhbEJ5OnttZXNzYWdlOnQubWVzc2FnZSxpbmRleDpBLApjb250ZXh0Om4uc2xpY2UoQS0xMDAsQSsxMDApLG1vZGU6dC5tb2RlLHJlc3VsdFNvRmFyOmt9LF9lbWl0dGVyOk19O2lmKHIpcmV0dXJuewpsYW5ndWFnZTplLHZhbHVlOlkobiksaWxsZWdhbDohMSxyZWxldmFuY2U6MCxlcnJvclJhaXNlZDp0LF9lbWl0dGVyOk0sX3RvcDpOfQo7dGhyb3cgdH19ZnVuY3Rpb24geChlLHQpe3Q9dHx8cC5sYW5ndWFnZXN8fE9iamVjdC5rZXlzKGkpO2NvbnN0IG49KGU9PnsKY29uc3QgdD17dmFsdWU6WShlKSxpbGxlZ2FsOiExLHJlbGV2YW5jZTowLF90b3A6bCxfZW1pdHRlcjpuZXcgcC5fX2VtaXR0ZXIocCl9CjtyZXR1cm4gdC5fZW1pdHRlci5hZGRUZXh0KGUpLHR9KShlKSxzPXQuZmlsdGVyKE8pLmZpbHRlcihrKS5tYXAoKHQ9PkUodCxlLCExKSkpCjtzLnVuc2hpZnQobik7Y29uc3Qgbz1zLnNvcnQoKChlLHQpPT57CmlmKGUucmVsZXZhbmNlIT09dC5yZWxldmFuY2UpcmV0dXJuIHQucmVsZXZhbmNlLWUucmVsZXZhbmNlCjtpZihlLmxhbmd1YWdlJiZ0Lmxhbmd1YWdlKXtpZihPKGUubGFuZ3VhZ2UpLnN1cGVyc2V0T2Y9PT10Lmxhbmd1YWdlKXJldHVybiAxCjtpZihPKHQubGFuZ3VhZ2UpLnN1cGVyc2V0T2Y9PT1lLmxhbmd1YWdlKXJldHVybi0xfXJldHVybiAwfSkpLFtyLGFdPW8sYz1yCjtyZXR1cm4gYy5zZWNvbmRCZXN0PWEsY31mdW5jdGlvbiB3KGUpe2xldCB0PW51bGw7Y29uc3Qgbj0oZT0+ewpsZXQgdD1lLmNsYXNzTmFtZSsiICI7dCs9ZS5wYXJlbnROb2RlP2UucGFyZW50Tm9kZS5jbGFzc05hbWU6IiIKO2NvbnN0IG49cC5sYW5ndWFnZURldGVjdFJlLmV4ZWModCk7aWYobil7Y29uc3QgdD1PKG5bMV0pCjtyZXR1cm4gdHx8KFgoYS5yZXBsYWNlKCJ7fSIsblsxXSkpLApYKCJGYWxsaW5nIGJhY2sgdG8gbm8taGlnaGxpZ2h0IG1vZGUgZm9yIHRoaXMgYmxvY2suIixlKSksdD9uWzFdOiJuby1oaWdobGlnaHQifQpyZXR1cm4gdC5zcGxpdCgvXHMrLykuZmluZCgoZT0+YihlKXx8TyhlKSkpfSkoZSk7aWYoYihuKSlyZXR1cm4KO2lmKE4oImJlZm9yZTpoaWdobGlnaHRFbGVtZW50Iix7ZWw6ZSxsYW5ndWFnZTpuCn0pLGUuZGF0YXNldC5oaWdobGlnaHRlZClyZXR1cm4gdm9pZCBjb25zb2xlLmxvZygiRWxlbWVudCBwcmV2aW91c2x5IGhpZ2hsaWdodGVkLiBUbyBoaWdobGlnaHQgYWdhaW4sIGZpcnN0IHVuc2V0IGBkYXRhc2V0LmhpZ2hsaWdodGVkYC4iLGUpCjtpZihlLmNoaWxkcmVuLmxlbmd0aD4wJiYocC5pZ25vcmVVbmVzY2FwZWRIVE1MfHwoY29uc29sZS53YXJuKCJPbmUgb2YgeW91ciBjb2RlIGJsb2NrcyBpbmNsdWRlcyB1bmVzY2FwZWQgSFRNTC4gVGhpcyBpcyBhIHBvdGVudGlhbGx5IHNlcmlvdXMgc2VjdXJpdHkgcmlzay4iKSwKY29uc29sZS53YXJuKCJodHRwczovL2dpdGh1Yi5jb20vaGlnaGxpZ2h0anMvaGlnaGxpZ2h0LmpzL3dpa2kvc2VjdXJpdHkiKSwKY29uc29sZS53YXJuKCJUaGUgZWxlbWVudCB3aXRoIHVuZXNjYXBlZCBIVE1MOiIpLApjb25zb2xlLndhcm4oZSkpLHAudGhyb3dVbmVzY2FwZWRIVE1MKSl0aHJvdyBuZXcgSigiT25lIG9mIHlvdXIgY29kZSBibG9ja3MgaW5jbHVkZXMgdW5lc2NhcGVkIEhUTUwuIixlLmlubmVySFRNTCkKO3Q9ZTtjb25zdCBpPXQudGV4dENvbnRlbnQsbz1uP20oaSx7bGFuZ3VhZ2U6bixpZ25vcmVJbGxlZ2FsczohMH0pOngoaSkKO2UuaW5uZXJIVE1MPW8udmFsdWUsZS5kYXRhc2V0LmhpZ2hsaWdodGVkPSJ5ZXMiLCgoZSx0LG4pPT57Y29uc3QgaT10JiZzW3RdfHxuCjtlLmNsYXNzTGlzdC5hZGQoImhsanMiKSxlLmNsYXNzTGlzdC5hZGQoImxhbmd1YWdlLSIraSkKfSkoZSxuLG8ubGFuZ3VhZ2UpLGUucmVzdWx0PXtsYW5ndWFnZTpvLmxhbmd1YWdlLHJlOm8ucmVsZXZhbmNlLApyZWxldmFuY2U6by5yZWxldmFuY2V9LG8uc2Vjb25kQmVzdCYmKGUuc2Vjb25kQmVzdD17Cmxhbmd1YWdlOm8uc2Vjb25kQmVzdC5sYW5ndWFnZSxyZWxldmFuY2U6by5zZWNvbmRCZXN0LnJlbGV2YW5jZQp9KSxOKCJhZnRlcjpoaWdobGlnaHRFbGVtZW50Iix7ZWw6ZSxyZXN1bHQ6byx0ZXh0Oml9KX1sZXQgeT0hMTtmdW5jdGlvbiBfKCl7CiJsb2FkaW5nIiE9PWRvY3VtZW50LnJlYWR5U3RhdGU/ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChwLmNzc1NlbGVjdG9yKS5mb3JFYWNoKHcpOnk9ITAKfWZ1bmN0aW9uIE8oZSl7cmV0dXJuIGU9KGV8fCIiKS50b0xvd2VyQ2FzZSgpLGlbZV18fGlbc1tlXV19CmZ1bmN0aW9uIHYoZSx7bGFuZ3VhZ2VOYW1lOnR9KXsic3RyaW5nIj09dHlwZW9mIGUmJihlPVtlXSksZS5mb3JFYWNoKChlPT57CnNbZS50b0xvd2VyQ2FzZSgpXT10fSkpfWZ1bmN0aW9uIGsoZSl7Y29uc3QgdD1PKGUpCjtyZXR1cm4gdCYmIXQuZGlzYWJsZUF1dG9kZXRlY3R9ZnVuY3Rpb24gTihlLHQpe2NvbnN0IG49ZTtvLmZvckVhY2goKGU9PnsKZVtuXSYmZVtuXSh0KX0pKX0KInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5hZGRFdmVudExpc3RlbmVyJiZ3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsKCgpPT57CnkmJl8oKX0pLCExKSxPYmplY3QuYXNzaWduKG4se2hpZ2hsaWdodDptLGhpZ2hsaWdodEF1dG86eCxoaWdobGlnaHRBbGw6XywKaGlnaGxpZ2h0RWxlbWVudDp3LApoaWdobGlnaHRCbG9jazplPT4oRygiMTAuNy4wIiwiaGlnaGxpZ2h0QmxvY2sgd2lsbCBiZSByZW1vdmVkIGVudGlyZWx5IGluIHYxMi4wIiksCkcoIjEwLjcuMCIsIlBsZWFzZSB1c2UgaGlnaGxpZ2h0RWxlbWVudCBub3cuIiksdyhlKSksY29uZmlndXJlOmU9PntwPVEocCxlKX0sCmluaXRIaWdobGlnaHRpbmc6KCk9PnsKXygpLEcoIjEwLjYuMCIsImluaXRIaWdobGlnaHRpbmcoKSBkZXByZWNhdGVkLiAgVXNlIGhpZ2hsaWdodEFsbCgpIG5vdy4iKX0sCmluaXRIaWdobGlnaHRpbmdPbkxvYWQ6KCk9PnsKXygpLEcoIjEwLjYuMCIsImluaXRIaWdobGlnaHRpbmdPbkxvYWQoKSBkZXByZWNhdGVkLiAgVXNlIGhpZ2hsaWdodEFsbCgpIG5vdy4iKQp9LHJlZ2lzdGVyTGFuZ3VhZ2U6KGUsdCk9PntsZXQgcz1udWxsO3RyeXtzPXQobil9Y2F0Y2godCl7CmlmKFcoIkxhbmd1YWdlIGRlZmluaXRpb24gZm9yICd7fScgY291bGQgbm90IGJlIHJlZ2lzdGVyZWQuIi5yZXBsYWNlKCJ7fSIsZSkpLAohcil0aHJvdyB0O1codCkscz1sfQpzLm5hbWV8fChzLm5hbWU9ZSksaVtlXT1zLHMucmF3RGVmaW5pdGlvbj10LmJpbmQobnVsbCxuKSxzLmFsaWFzZXMmJnYocy5hbGlhc2VzLHsKbGFuZ3VhZ2VOYW1lOmV9KX0sdW5yZWdpc3Rlckxhbmd1YWdlOmU9PntkZWxldGUgaVtlXQo7Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmtleXMocykpc1t0XT09PWUmJmRlbGV0ZSBzW3RdfSwKbGlzdExhbmd1YWdlczooKT0+T2JqZWN0LmtleXMoaSksZ2V0TGFuZ3VhZ2U6TyxyZWdpc3RlckFsaWFzZXM6diwKYXV0b0RldGVjdGlvbjprLGluaGVyaXQ6USxhZGRQbHVnaW46ZT0+eyhlPT57CmVbImJlZm9yZTpoaWdobGlnaHRCbG9jayJdJiYhZVsiYmVmb3JlOmhpZ2hsaWdodEVsZW1lbnQiXSYmKGVbImJlZm9yZTpoaWdobGlnaHRFbGVtZW50Il09dD0+ewplWyJiZWZvcmU6aGlnaGxpZ2h0QmxvY2siXShPYmplY3QuYXNzaWduKHtibG9jazp0LmVsfSx0KSkKfSksZVsiYWZ0ZXI6aGlnaGxpZ2h0QmxvY2siXSYmIWVbImFmdGVyOmhpZ2hsaWdodEVsZW1lbnQiXSYmKGVbImFmdGVyOmhpZ2hsaWdodEVsZW1lbnQiXT10PT57CmVbImFmdGVyOmhpZ2hsaWdodEJsb2NrIl0oT2JqZWN0LmFzc2lnbih7YmxvY2s6dC5lbH0sdCkpfSl9KShlKSxvLnB1c2goZSl9LApyZW1vdmVQbHVnaW46ZT0+e2NvbnN0IHQ9by5pbmRleE9mKGUpOy0xIT09dCYmby5zcGxpY2UodCwxKX19KSxuLmRlYnVnTW9kZT0oKT0+ewpyPSExfSxuLnNhZmVNb2RlPSgpPT57cj0hMH0sbi52ZXJzaW9uU3RyaW5nPSIxMS45LjAiLG4ucmVnZXg9e2NvbmNhdDpoLApsb29rYWhlYWQ6ZyxlaXRoZXI6ZixvcHRpb25hbDpkLGFueU51bWJlck9mVGltZXM6dX0KO2Zvcihjb25zdCB0IGluIGopIm9iamVjdCI9PXR5cGVvZiBqW3RdJiZlKGpbdF0pO3JldHVybiBPYmplY3QuYXNzaWduKG4saiksbgp9LG5lPXRlKHt9KTtyZXR1cm4gbmUubmV3SW5zdGFuY2U9KCk9PnRlKHt9KSxuZX0oKQo7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZSYmKG1vZHVsZS5leHBvcnRzPWhsanMpOy8qISBgY3BwYCBncmFtbWFyIGNvbXBpbGVkIGZvciBIaWdobGlnaHQuanMgMTEuOS4wICovCigoKT0+e3ZhciBlPSgoKT0+eyJ1c2Ugc3RyaWN0IjtyZXR1cm4gZT0+e2NvbnN0IHQ9ZS5yZWdleCxhPWUuQ09NTUVOVCgiLy8iLCIkIix7CmNvbnRhaW5zOlt7YmVnaW46L1xcXG4vfV0KfSksbj0iZGVjbHR5cGVcXChhdXRvXFwpIixyPSJbYS16QS1aX11cXHcqOjoiLGk9Iig/IXN0cnVjdCkoIituKyJ8Iit0Lm9wdGlvbmFsKHIpKyJbYS16QS1aX11cXHcqIit0Lm9wdGlvbmFsKCI8W148Pl0rPiIpKyIpIixzPXsKY2xhc3NOYW1lOiJ0eXBlIixiZWdpbjoiXFxiW2EtelxcZF9dKl90XFxiIn0sYz17Y2xhc3NOYW1lOiJzdHJpbmciLHZhcmlhbnRzOlt7CmJlZ2luOicodTg/fFV8TCk/IicsZW5kOiciJyxpbGxlZ2FsOiJcXG4iLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEVdfSx7CmJlZ2luOiIodTg/fFV8TCk/JyhcXFxcKHhbMC05QS1GYS1mXXsyfXx1WzAtOUEtRmEtZl17NCw4fXxbMC03XXszfXxcXFMpfC4pIiwKZW5kOiInIixpbGxlZ2FsOiIuIn0sZS5FTkRfU0FNRV9BU19CRUdJTih7CmJlZ2luOi8oPzp1OD98VXxMKT9SIihbXigpXFwgXXswLDE2fSlcKC8sZW5kOi9cKShbXigpXFwgXXswLDE2fSkiL30pXX0sbz17CmNsYXNzTmFtZToibnVtYmVyIix2YXJpYW50czpbewpiZWdpbjoiWystXT8oPzooPzpbMC05XSg/Oic/WzAtOV0pKlxcLig/OlswLTldKD86Jz9bMC05XSkqKT98XFwuWzAtOV0oPzonP1swLTldKSopKD86W0VlXVsrLV0/WzAtOV0oPzonP1swLTldKSopP3xbMC05XSg/Oic/WzAtOV0pKltFZV1bKy1dP1swLTldKD86Jz9bMC05XSkqfDBbWHhdKD86WzAtOUEtRmEtZl0oPzonP1swLTlBLUZhLWZdKSooPzpcXC4oPzpbMC05QS1GYS1mXSg/Oic/WzAtOUEtRmEtZl0pKik/KT98XFwuWzAtOUEtRmEtZl0oPzonP1swLTlBLUZhLWZdKSopW1BwXVsrLV0/WzAtOV0oPzonP1swLTldKSopKD86W0ZmXSg/OjE2fDMyfDY0fDEyOCk/fChCRnxiZikxNnxbTGxdfCkiCn0sewpiZWdpbjoiWystXT9cXGIoPzowW0JiXVswMV0oPzonP1swMV0pKnwwW1h4XVswLTlBLUZhLWZdKD86Jz9bMC05QS1GYS1mXSkqfDAoPzonP1swLTddKSp8WzEtOV0oPzonP1swLTldKSopKD86W1V1XSg/OkxMP3xsbD8pfFtVdV1bWnpdP3woPzpMTD98bGw/KVtVdV0/fFtael1bVXVdfCkiCn1dLHJlbGV2YW5jZTowfSxsPXtjbGFzc05hbWU6Im1ldGEiLGJlZ2luOi8jXHMqW2Etel0rXGIvLGVuZDovJC8sa2V5d29yZHM6ewprZXl3b3JkOiJpZiBlbHNlIGVsaWYgZW5kaWYgZGVmaW5lIHVuZGVmIHdhcm5pbmcgZXJyb3IgbGluZSBwcmFnbWEgX1ByYWdtYSBpZmRlZiBpZm5kZWYgaW5jbHVkZSIKfSxjb250YWluczpbe2JlZ2luOi9cXFxuLyxyZWxldmFuY2U6MH0sZS5pbmhlcml0KGMse2NsYXNzTmFtZToic3RyaW5nIn0pLHsKY2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOi88Lio/Pi99LGEsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERV19LHU9ewpjbGFzc05hbWU6InRpdGxlIixiZWdpbjp0Lm9wdGlvbmFsKHIpK2UuSURFTlRfUkUscmVsZXZhbmNlOjAKfSxkPXQub3B0aW9uYWwocikrZS5JREVOVF9SRSsiXFxzKlxcKCIscD17CnR5cGU6WyJib29sIiwiY2hhciIsImNoYXIxNl90IiwiY2hhcjMyX3QiLCJjaGFyOF90IiwiZG91YmxlIiwiZmxvYXQiLCJpbnQiLCJsb25nIiwic2hvcnQiLCJ2b2lkIiwid2NoYXJfdCIsInVuc2lnbmVkIiwic2lnbmVkIiwiY29uc3QiLCJzdGF0aWMiXSwKa2V5d29yZDpbImFsaWduYXMiLCJhbGlnbm9mIiwiYW5kIiwiYW5kX2VxIiwiYXNtIiwiYXRvbWljX2NhbmNlbCIsImF0b21pY19jb21taXQiLCJhdG9taWNfbm9leGNlcHQiLCJhdXRvIiwiYml0YW5kIiwiYml0b3IiLCJicmVhayIsImNhc2UiLCJjYXRjaCIsImNsYXNzIiwiY29fYXdhaXQiLCJjb19yZXR1cm4iLCJjb195aWVsZCIsImNvbXBsIiwiY29uY2VwdCIsImNvbnN0X2Nhc3R8MTAiLCJjb25zdGV2YWwiLCJjb25zdGV4cHIiLCJjb25zdGluaXQiLCJjb250aW51ZSIsImRlY2x0eXBlIiwiZGVmYXVsdCIsImRlbGV0ZSIsImRvIiwiZHluYW1pY19jYXN0fDEwIiwiZWxzZSIsImVudW0iLCJleHBsaWNpdCIsImV4cG9ydCIsImV4dGVybiIsImZhbHNlIiwiZmluYWwiLCJmb3IiLCJmcmllbmQiLCJnb3RvIiwiaWYiLCJpbXBvcnQiLCJpbmxpbmUiLCJtb2R1bGUiLCJtdXRhYmxlIiwibmFtZXNwYWNlIiwibmV3Iiwibm9leGNlcHQiLCJub3QiLCJub3RfZXEiLCJudWxscHRyIiwib3BlcmF0b3IiLCJvciIsIm9yX2VxIiwib3ZlcnJpZGUiLCJwcml2YXRlIiwicHJvdGVjdGVkIiwicHVibGljIiwicmVmbGV4cHIiLCJyZWdpc3RlciIsInJlaW50ZXJwcmV0X2Nhc3R8MTAiLCJyZXF1aXJlcyIsInJldHVybiIsInNpemVvZiIsInN0YXRpY19hc3NlcnQiLCJzdGF0aWNfY2FzdHwxMCIsInN0cnVjdCIsInN3aXRjaCIsInN5bmNocm9uaXplZCIsInRlbXBsYXRlIiwidGhpcyIsInRocmVhZF9sb2NhbCIsInRocm93IiwidHJhbnNhY3Rpb25fc2FmZSIsInRyYW5zYWN0aW9uX3NhZmVfZHluYW1pYyIsInRydWUiLCJ0cnkiLCJ0eXBlZGVmIiwidHlwZWlkIiwidHlwZW5hbWUiLCJ1bmlvbiIsInVzaW5nIiwidmlydHVhbCIsInZvbGF0aWxlIiwid2hpbGUiLCJ4b3IiLCJ4b3JfZXEiXSwKbGl0ZXJhbDpbIk5VTEwiLCJmYWxzZSIsIm51bGxvcHQiLCJudWxscHRyIiwidHJ1ZSJdLGJ1aWx0X2luOlsiX1ByYWdtYSJdLApfdHlwZV9oaW50czpbImFueSIsImF1dG9fcHRyIiwiYmFycmllciIsImJpbmFyeV9zZW1hcGhvcmUiLCJiaXRzZXQiLCJjb21wbGV4IiwiY29uZGl0aW9uX3ZhcmlhYmxlIiwiY29uZGl0aW9uX3ZhcmlhYmxlX2FueSIsImNvdW50aW5nX3NlbWFwaG9yZSIsImRlcXVlIiwiZmFsc2VfdHlwZSIsImZ1dHVyZSIsImltYWdpbmFyeSIsImluaXRpYWxpemVyX2xpc3QiLCJpc3RyaW5nc3RyZWFtIiwianRocmVhZCIsImxhdGNoIiwibG9ja19ndWFyZCIsIm11bHRpbWFwIiwibXVsdGlzZXQiLCJtdXRleCIsIm9wdGlvbmFsIiwib3N0cmluZ3N0cmVhbSIsInBhY2thZ2VkX3Rhc2siLCJwYWlyIiwicHJvbWlzZSIsInByaW9yaXR5X3F1ZXVlIiwicXVldWUiLCJyZWN1cnNpdmVfbXV0ZXgiLCJyZWN1cnNpdmVfdGltZWRfbXV0ZXgiLCJzY29wZWRfbG9jayIsInNldCIsInNoYXJlZF9mdXR1cmUiLCJzaGFyZWRfbG9jayIsInNoYXJlZF9tdXRleCIsInNoYXJlZF90aW1lZF9tdXRleCIsInNoYXJlZF9wdHIiLCJzdGFjayIsInN0cmluZ192aWV3Iiwic3RyaW5nc3RyZWFtIiwidGltZWRfbXV0ZXgiLCJ0aHJlYWQiLCJ0cnVlX3R5cGUiLCJ0dXBsZSIsInVuaXF1ZV9sb2NrIiwidW5pcXVlX3B0ciIsInVub3JkZXJlZF9tYXAiLCJ1bm9yZGVyZWRfbXVsdGltYXAiLCJ1bm9yZGVyZWRfbXVsdGlzZXQiLCJ1bm9yZGVyZWRfc2V0IiwidmFyaWFudCIsInZlY3RvciIsIndlYWtfcHRyIiwid3N0cmluZyIsIndzdHJpbmdfdmlldyJdCn0sXz17Y2xhc3NOYW1lOiJmdW5jdGlvbi5kaXNwYXRjaCIscmVsZXZhbmNlOjAsa2V5d29yZHM6ewpfaGludDpbImFib3J0IiwiYWJzIiwiYWNvcyIsImFwcGx5IiwiYXNfY29uc3QiLCJhc2luIiwiYXRhbiIsImF0YW4yIiwiY2FsbG9jIiwiY2VpbCIsImNlcnIiLCJjaW4iLCJjbG9nIiwiY29zIiwiY29zaCIsImNvdXQiLCJkZWNsdmFsIiwiZW5kbCIsImV4Y2hhbmdlIiwiZXhpdCIsImV4cCIsImZhYnMiLCJmbG9vciIsImZtb2QiLCJmb3J3YXJkIiwiZnByaW50ZiIsImZwdXRzIiwiZnJlZSIsImZyZXhwIiwiZnNjYW5mIiwiZnV0dXJlIiwiaW52b2tlIiwiaXNhbG51bSIsImlzYWxwaGEiLCJpc2NudHJsIiwiaXNkaWdpdCIsImlzZ3JhcGgiLCJpc2xvd2VyIiwiaXNwcmludCIsImlzcHVuY3QiLCJpc3NwYWNlIiwiaXN1cHBlciIsImlzeGRpZ2l0IiwibGFicyIsImxhdW5kZXIiLCJsZGV4cCIsImxvZyIsImxvZzEwIiwibWFrZV9wYWlyIiwibWFrZV9zaGFyZWQiLCJtYWtlX3NoYXJlZF9mb3Jfb3ZlcndyaXRlIiwibWFrZV90dXBsZSIsIm1ha2VfdW5pcXVlIiwibWFsbG9jIiwibWVtY2hyIiwibWVtY21wIiwibWVtY3B5IiwibWVtc2V0IiwibW9kZiIsIm1vdmUiLCJwb3ciLCJwcmludGYiLCJwdXRjaGFyIiwicHV0cyIsInJlYWxsb2MiLCJzY2FuZiIsInNpbiIsInNpbmgiLCJzbnByaW50ZiIsInNwcmludGYiLCJzcXJ0Iiwic3NjYW5mIiwic3RkIiwic3RkZXJyIiwic3RkaW4iLCJzdGRvdXQiLCJzdHJjYXQiLCJzdHJjaHIiLCJzdHJjbXAiLCJzdHJjcHkiLCJzdHJjc3BuIiwic3RybGVuIiwic3RybmNhdCIsInN0cm5jbXAiLCJzdHJuY3B5Iiwic3RycGJyayIsInN0cnJjaHIiLCJzdHJzcG4iLCJzdHJzdHIiLCJzd2FwIiwidGFuIiwidGFuaCIsInRlcm1pbmF0ZSIsInRvX3VuZGVybHlpbmciLCJ0b2xvd2VyIiwidG91cHBlciIsInZmcHJpbnRmIiwidmlzaXQiLCJ2cHJpbnRmIiwidnNwcmludGYiXQp9LApiZWdpbjp0LmNvbmNhdCgvXGIvLC8oPyFkZWNsdHlwZSkvLC8oPyFpZikvLC8oPyFmb3IpLywvKD8hc3dpdGNoKS8sLyg/IXdoaWxlKS8sZS5JREVOVF9SRSx0Lmxvb2thaGVhZCgvKDxbXjw+XSs+fClccypcKC8pKQp9LG09W18sbCxzLGEsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSxvLGNdLGY9e3ZhcmlhbnRzOlt7YmVnaW46Lz0vLGVuZDovOy99LHsKYmVnaW46L1woLyxlbmQ6L1wpL30se2JlZ2luS2V5d29yZHM6Im5ldyB0aHJvdyByZXR1cm4gZWxzZSIsZW5kOi87L31dLAprZXl3b3JkczpwLGNvbnRhaW5zOm0uY29uY2F0KFt7YmVnaW46L1woLyxlbmQ6L1wpLyxrZXl3b3JkczpwLApjb250YWluczptLmNvbmNhdChbInNlbGYiXSkscmVsZXZhbmNlOjB9XSkscmVsZXZhbmNlOjB9LGc9e2NsYXNzTmFtZToiZnVuY3Rpb24iLApiZWdpbjoiKCIraSsiW1xcKiZcXHNdKykrIitkLHJldHVybkJlZ2luOiEwLGVuZDovW3s7PV0vLGV4Y2x1ZGVFbmQ6ITAsCmtleXdvcmRzOnAsaWxsZWdhbDovW15cd1xzXComOjw+Ll0vLGNvbnRhaW5zOlt7YmVnaW46bixrZXl3b3JkczpwLHJlbGV2YW5jZTowfSx7CmJlZ2luOmQscmV0dXJuQmVnaW46ITAsY29udGFpbnM6W3VdLHJlbGV2YW5jZTowfSx7YmVnaW46Lzo6LyxyZWxldmFuY2U6MH0sewpiZWdpbjovOi8sZW5kc1dpdGhQYXJlbnQ6ITAsY29udGFpbnM6W2Msb119LHtyZWxldmFuY2U6MCxtYXRjaDovLC99LHsKY2xhc3NOYW1lOiJwYXJhbXMiLGJlZ2luOi9cKC8sZW5kOi9cKS8sa2V5d29yZHM6cCxyZWxldmFuY2U6MCwKY29udGFpbnM6W2EsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSxjLG8scyx7YmVnaW46L1woLyxlbmQ6L1wpLyxrZXl3b3JkczpwLApyZWxldmFuY2U6MCxjb250YWluczpbInNlbGYiLGEsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSxjLG8sc119XQp9LHMsYSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLGxdfTtyZXR1cm57bmFtZToiQysrIiwKYWxpYXNlczpbImNjIiwiYysrIiwiaCsrIiwiaHBwIiwiaGgiLCJoeHgiLCJjeHgiXSxrZXl3b3JkczpwLGlsbGVnYWw6IjwvIiwKY2xhc3NOYW1lQWxpYXNlczp7ImZ1bmN0aW9uLmRpc3BhdGNoIjoiYnVpbHRfaW4ifSwKY29udGFpbnM6W10uY29uY2F0KGYsZyxfLG0sW2wsewpiZWdpbjoiXFxiKGRlcXVlfGxpc3R8cXVldWV8cHJpb3JpdHlfcXVldWV8cGFpcnxzdGFja3x2ZWN0b3J8bWFwfHNldHxiaXRzZXR8bXVsdGlzZXR8bXVsdGltYXB8dW5vcmRlcmVkX21hcHx1bm9yZGVyZWRfc2V0fHVub3JkZXJlZF9tdWx0aXNldHx1bm9yZGVyZWRfbXVsdGltYXB8YXJyYXl8dHVwbGV8b3B0aW9uYWx8dmFyaWFudHxmdW5jdGlvbilcXHMqPCg/ITwpIiwKZW5kOiI+IixrZXl3b3JkczpwLGNvbnRhaW5zOlsic2VsZiIsc119LHtiZWdpbjplLklERU5UX1JFKyI6OiIsa2V5d29yZHM6cH0sewptYXRjaDpbL1xiKD86ZW51bSg/OlxzKyg/OmNsYXNzfHN0cnVjdCkpP3xjbGFzc3xzdHJ1Y3R8dW5pb24pLywvXHMrLywvXHcrL10sCmNsYXNzTmFtZTp7MToia2V5d29yZCIsMzoidGl0bGUuY2xhc3MifX1dKX19fSkoKTtobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoImNwcCIsZSkKfSkoKTs="></script>
<script src="data:text/javascript;base64,dmFyIG1lcmdlSFRNTFBsdWdpbiA9IChmdW5jdGlvbiAoKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICB2YXIgb3JpZ2luYWxTdHJlYW07CgogIC8qKgogICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZQogICAqIEByZXR1cm5zIHtzdHJpbmd9CiAgICovCiAgZnVuY3Rpb24gZXNjYXBlSFRNTCh2YWx1ZSkgewogICAgcmV0dXJuIHZhbHVlCiAgICAgIC5yZXBsYWNlKC8mL2csICcmYW1wOycpCiAgICAgIC5yZXBsYWNlKC88L2csICcmbHQ7JykKICAgICAgLnJlcGxhY2UoLz4vZywgJyZndDsnKQogICAgICAucmVwbGFjZSgvIi9nLCAnJnF1b3Q7JykKICAgICAgLnJlcGxhY2UoLycvZywgJyYjeDI3OycpOwogIH0KCiAgLyogcGx1Z2luIGl0c2VsZiAqLwoKICAvKiogQHR5cGUge0hMSlNQbHVnaW59ICovCiAgY29uc3QgbWVyZ2VIVE1MUGx1Z2luID0gewogICAgLy8gcHJlc2VydmUgdGhlIG9yaWdpbmFsIEhUTUwgdG9rZW4gc3RyZWFtCiAgICAiYmVmb3JlOmhpZ2hsaWdodEVsZW1lbnQiOiAoeyBlbCB9KSA9PiB7CiAgICAgIG9yaWdpbmFsU3RyZWFtID0gbm9kZVN0cmVhbShlbCk7CiAgICB9LAogICAgLy8gbWVyZ2UgaXQgYWZ0ZXJ3YXJkcyB3aXRoIHRoZSBoaWdobGlnaHRlZCB0b2tlbiBzdHJlYW0KICAgICJhZnRlcjpoaWdobGlnaHRFbGVtZW50IjogKHsgZWwsIHJlc3VsdCwgdGV4dCB9KSA9PiB7CiAgICAgIGlmICghb3JpZ2luYWxTdHJlYW0ubGVuZ3RoKSByZXR1cm47CgogICAgICBjb25zdCByZXN1bHROb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgIHJlc3VsdE5vZGUuaW5uZXJIVE1MID0gcmVzdWx0LnZhbHVlOwogICAgICByZXN1bHQudmFsdWUgPSBtZXJnZVN0cmVhbXMob3JpZ2luYWxTdHJlYW0sIG5vZGVTdHJlYW0ocmVzdWx0Tm9kZSksIHRleHQpOwogICAgICBlbC5pbm5lckhUTUwgPSByZXN1bHQudmFsdWU7CiAgICB9CiAgfTsKCiAgLyogU3RyZWFtIG1lcmdpbmcgc3VwcG9ydCBmdW5jdGlvbnMgKi8KCiAgLyoqCiAgICogQHR5cGVkZWYgRXZlbnQKICAgKiBAcHJvcGVydHkgeydzdGFydCd8J3N0b3AnfSBldmVudAogICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBvZmZzZXQKICAgKiBAcHJvcGVydHkge05vZGV9IG5vZGUKICAgKi8KCiAgLyoqCiAgICogQHBhcmFtIHtOb2RlfSBub2RlCiAgICovCiAgZnVuY3Rpb24gdGFnKG5vZGUpIHsKICAgIHJldHVybiBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7CiAgfQoKICAvKioKICAgKiBAcGFyYW0ge05vZGV9IG5vZGUKICAgKi8KICBmdW5jdGlvbiBub2RlU3RyZWFtKG5vZGUpIHsKICAgIC8qKiBAdHlwZSBFdmVudFtdICovCiAgICBjb25zdCByZXN1bHQgPSBbXTsKICAgIChmdW5jdGlvbiBfbm9kZVN0cmVhbShub2RlLCBvZmZzZXQpIHsKICAgICAgZm9yIChsZXQgY2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQ7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLm5leHRTaWJsaW5nKSB7CiAgICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlID09PSAzKSB7CiAgICAgICAgICBvZmZzZXQgKz0gY2hpbGQubm9kZVZhbHVlLmxlbmd0aDsKICAgICAgICB9IGVsc2UgaWYgKGNoaWxkLm5vZGVUeXBlID09PSAxKSB7CiAgICAgICAgICByZXN1bHQucHVzaCh7CiAgICAgICAgICAgIGV2ZW50OiAnc3RhcnQnLAogICAgICAgICAgICBvZmZzZXQ6IG9mZnNldCwKICAgICAgICAgICAgbm9kZTogY2hpbGQKICAgICAgICAgIH0pOwogICAgICAgICAgb2Zmc2V0ID0gX25vZGVTdHJlYW0oY2hpbGQsIG9mZnNldCk7CiAgICAgICAgICAvLyBQcmV2ZW50IHZvaWQgZWxlbWVudHMgZnJvbSBoYXZpbmcgYW4gZW5kIHRhZyB0aGF0IHdvdWxkIGFjdHVhbGx5CiAgICAgICAgICAvLyBkb3VibGUgdGhlbSBpbiB0aGUgb3V0cHV0LiBUaGVyZSBhcmUgbW9yZSB2b2lkIGVsZW1lbnRzIGluIEhUTUwKICAgICAgICAgIC8vIGJ1dCB3ZSBsaXN0IG9ubHkgdGhvc2UgcmVhbGlzdGljYWxseSBleHBlY3RlZCBpbiBjb2RlIGRpc3BsYXkuCiAgICAgICAgICBpZiAoIXRhZyhjaGlsZCkubWF0Y2goL2JyfGhyfGltZ3xpbnB1dC8pKSB7CiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHsKICAgICAgICAgICAgICBldmVudDogJ3N0b3AnLAogICAgICAgICAgICAgIG9mZnNldDogb2Zmc2V0LAogICAgICAgICAgICAgIG5vZGU6IGNoaWxkCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gb2Zmc2V0OwogICAgfSkobm9kZSwgMCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLyoqCiAgICogQHBhcmFtIHthbnl9IG9yaWdpbmFsIC0gdGhlIG9yaWdpbmFsIHN0cmVhbQogICAqIEBwYXJhbSB7YW55fSBoaWdobGlnaHRlZCAtIHN0cmVhbSBvZiB0aGUgaGlnaGxpZ2h0ZWQgc291cmNlCiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIC0gdGhlIG9yaWdpbmFsIHNvdXJjZSBpdHNlbGYKICAgKi8KICBmdW5jdGlvbiBtZXJnZVN0cmVhbXMob3JpZ2luYWwsIGhpZ2hsaWdodGVkLCB2YWx1ZSkgewogICAgbGV0IHByb2Nlc3NlZCA9IDA7CiAgICBsZXQgcmVzdWx0ID0gJyc7CiAgICBjb25zdCBub2RlU3RhY2sgPSBbXTsKCiAgICBmdW5jdGlvbiBzZWxlY3RTdHJlYW0oKSB7CiAgICAgIGlmICghb3JpZ2luYWwubGVuZ3RoIHx8ICFoaWdobGlnaHRlZC5sZW5ndGgpIHsKICAgICAgICByZXR1cm4gb3JpZ2luYWwubGVuZ3RoID8gb3JpZ2luYWwgOiBoaWdobGlnaHRlZDsKICAgICAgfQogICAgICBpZiAob3JpZ2luYWxbMF0ub2Zmc2V0ICE9PSBoaWdobGlnaHRlZFswXS5vZmZzZXQpIHsKICAgICAgICByZXR1cm4gKG9yaWdpbmFsWzBdLm9mZnNldCA8IGhpZ2hsaWdodGVkWzBdLm9mZnNldCkgPyBvcmlnaW5hbCA6IGhpZ2hsaWdodGVkOwogICAgICB9CgogICAgICAvKgogICAgICBUbyBhdm9pZCBzdGFydGluZyB0aGUgc3RyZWFtIGp1c3QgYmVmb3JlIGl0IHNob3VsZCBzdG9wIHRoZSBvcmRlciBpcwogICAgICBlbnN1cmVkIHRoYXQgb3JpZ2luYWwgYWx3YXlzIHN0YXJ0cyBmaXJzdCBhbmQgY2xvc2VzIGxhc3Q6CgogICAgICBpZiAoZXZlbnQxID09ICdzdGFydCcgJiYgZXZlbnQyID09ICdzdGFydCcpCiAgICAgICAgcmV0dXJuIG9yaWdpbmFsOwogICAgICBpZiAoZXZlbnQxID09ICdzdGFydCcgJiYgZXZlbnQyID09ICdzdG9wJykKICAgICAgICByZXR1cm4gaGlnaGxpZ2h0ZWQ7CiAgICAgIGlmIChldmVudDEgPT0gJ3N0b3AnICYmIGV2ZW50MiA9PSAnc3RhcnQnKQogICAgICAgIHJldHVybiBvcmlnaW5hbDsKICAgICAgaWYgKGV2ZW50MSA9PSAnc3RvcCcgJiYgZXZlbnQyID09ICdzdG9wJykKICAgICAgICByZXR1cm4gaGlnaGxpZ2h0ZWQ7CgogICAgICAuLi4gd2hpY2ggaXMgY29sbGFwc2VkIHRvOgogICAgICAqLwogICAgICByZXR1cm4gaGlnaGxpZ2h0ZWRbMF0uZXZlbnQgPT09ICdzdGFydCcgPyBvcmlnaW5hbCA6IGhpZ2hsaWdodGVkOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHtOb2RlfSBub2RlCiAgICAgKi8KICAgIGZ1bmN0aW9uIG9wZW4obm9kZSkgewogICAgICAvKiogQHBhcmFtIHtBdHRyfSBhdHRyICovCiAgICAgIGZ1bmN0aW9uIGF0dHJpYnV0ZVN0cmluZyhhdHRyKSB7CiAgICAgICAgcmV0dXJuICcgJyArIGF0dHIubm9kZU5hbWUgKyAnPSInICsgZXNjYXBlSFRNTChhdHRyLnZhbHVlKSArICciJzsKICAgICAgfQogICAgICAvLyBAdHMtaWdub3JlCiAgICAgIHJlc3VsdCArPSAnPCcgKyB0YWcobm9kZSkgKyBbXS5tYXAuY2FsbChub2RlLmF0dHJpYnV0ZXMsIGF0dHJpYnV0ZVN0cmluZykuam9pbignJykgKyAnPic7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0ge05vZGV9IG5vZGUKICAgICAqLwogICAgZnVuY3Rpb24gY2xvc2Uobm9kZSkgewogICAgICByZXN1bHQgKz0gJzwvJyArIHRhZyhub2RlKSArICc+JzsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50CiAgICAgKi8KICAgIGZ1bmN0aW9uIHJlbmRlcihldmVudCkgewogICAgICAoZXZlbnQuZXZlbnQgPT09ICdzdGFydCcgPyBvcGVuIDogY2xvc2UpKGV2ZW50Lm5vZGUpOwogICAgfQoKICAgIHdoaWxlIChvcmlnaW5hbC5sZW5ndGggfHwgaGlnaGxpZ2h0ZWQubGVuZ3RoKSB7CiAgICAgIGxldCBzdHJlYW0gPSBzZWxlY3RTdHJlYW0oKTsKICAgICAgcmVzdWx0ICs9IGVzY2FwZUhUTUwodmFsdWUuc3Vic3RyaW5nKHByb2Nlc3NlZCwgc3RyZWFtWzBdLm9mZnNldCkpOwogICAgICBwcm9jZXNzZWQgPSBzdHJlYW1bMF0ub2Zmc2V0OwogICAgICBpZiAoc3RyZWFtID09PSBvcmlnaW5hbCkgewogICAgICAgIC8qCiAgICAgICAgT24gYW55IG9wZW5pbmcgb3IgY2xvc2luZyB0YWcgb2YgdGhlIG9yaWdpbmFsIG1hcmt1cCB3ZSBmaXJzdCBjbG9zZQogICAgICAgIHRoZSBlbnRpcmUgaGlnaGxpZ2h0ZWQgbm9kZSBzdGFjaywgdGhlbiByZW5kZXIgdGhlIG9yaWdpbmFsIHRhZyBhbG9uZwogICAgICAgIHdpdGggYWxsIHRoZSBmb2xsb3dpbmcgb3JpZ2luYWwgdGFncyBhdCB0aGUgc2FtZSBvZmZzZXQgYW5kIHRoZW4KICAgICAgICByZW9wZW4gYWxsIHRoZSB0YWdzIG9uIHRoZSBoaWdobGlnaHRlZCBzdGFjay4KICAgICAgICAqLwogICAgICAgIG5vZGVTdGFjay5yZXZlcnNlKCkuZm9yRWFjaChjbG9zZSk7CiAgICAgICAgZG8gewogICAgICAgICAgcmVuZGVyKHN0cmVhbS5zcGxpY2UoMCwgMSlbMF0pOwogICAgICAgICAgc3RyZWFtID0gc2VsZWN0U3RyZWFtKCk7CiAgICAgICAgfSB3aGlsZSAoc3RyZWFtID09PSBvcmlnaW5hbCAmJiBzdHJlYW0ubGVuZ3RoICYmIHN0cmVhbVswXS5vZmZzZXQgPT09IHByb2Nlc3NlZCk7CiAgICAgICAgbm9kZVN0YWNrLnJldmVyc2UoKS5mb3JFYWNoKG9wZW4pOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChzdHJlYW1bMF0uZXZlbnQgPT09ICdzdGFydCcpIHsKICAgICAgICAgIG5vZGVTdGFjay5wdXNoKHN0cmVhbVswXS5ub2RlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbm9kZVN0YWNrLnBvcCgpOwogICAgICAgIH0KICAgICAgICByZW5kZXIoc3RyZWFtLnNwbGljZSgwLCAxKVswXSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQgKyBlc2NhcGVIVE1MKHZhbHVlLnN1YnN0cihwcm9jZXNzZWQpKTsKICB9CgogIHJldHVybiBtZXJnZUhUTUxQbHVnaW47Cgp9KCkpOw=="></script>
</head>
<body><div>
<nav><div><div>
<h1 class="hide-on-wide name-of-paper">constexpr containers and adaptors</h1>
<div class="paper-info">
	<div><span class="key">Number:</span> P3372R3</div>
	<div><span class="key">Date:</span> <time>2025-02-11</time></div>
	<div><span class="key">Audience:</span> LEWG</div>
	<div><span class="key">Reply-to:</span> <a href="mailto:cpp@hanicka.net">Hana Dusíková</a></div>
</div>

<h2 id="table-of-contents"><a href="#table-of-contents">Table of contents</a></h2>
<ul>
	<li><a href="#history">Revision history</a></li>
	<li><a href="#introduction">Introduction and motivation</a></li>
	<li><a href="#what-is-not-included">What is not included</a>
		<ul>
			<li><a href="#hashing-not-included"><code>std::hash</code></a></li>
			<li><a href="#hive-not-included"><code>std::hive</code></a></li>
			<li><a href="#non-transient-allocations">non-transient allocations</a></li>
		</ul>
	</li>
	<li><a href="#implementation-experience">Implementation experience</a>
    <ul>
      <li><a href="#hashTstar"><code>std::hash</code></a></li>
			<li><a href="#less"><code>std::less</code> and friends</a></li>
      <li><a href="#node-handle-key"><code>key &amp; node_handle::key()</code></a></li>
			<li><a href="#libstdcxx">libstdc++</a></li>
    </ul>
  </li>
	<li><a href="#impact-on-existing-code">Impact on existing code</a></li>
	<li><a href="#notes-for-wording-changes">Notes for wording changes</a></li>
	<li><a href="#wording">Proposed changes to wording</a>
		<ul>
			<li><a href="#feature-test-macros">Feature test macros</a></li>
		</ul>
  </li>
</ul>
</div></div></nav>
<article>
<div><div>
	<h1 class="hide-on-narrow name-of-paper">constexpr containers and adaptors</h1>
	<p>This paper proposes marking all containers and adaptors <code>constexpr</code> (with exception of <code>std::hive</code>). This will make compile time programming much easier by making normal C++ and <code>constexpr</code> C++ more similar.</p>
	<p>This paper doesn't propose changes in <code>std::hash</code>.</p>
	<h2 id="history"><a href="#history">Revision history</a></h2>
	<ul>
    <li><a href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p3372r2.html">R2</a>&#x2005;→&#x2005;R3: <a href="#feature-test-macros">updated features test macros</a></li>
		<li><a href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p3372r1.html">R1</a>&#x2005;→&#x2005;<a href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p3372r2.html">R2</a>: <a href="#node-handle-key">Removal of <code>constexpr</code> for <code><em>node-handle</em>::mapped()</code> member function.</a> Removal of <code>ceilf</code> mention in the implementation section as the function is constexpr since C++23. <a href="#hashing-not-included">Added discussion about hashing and why it's not included.</a> <a href="#libstdcxx">Added informations about <em>libstdc++</em> implementability.</a> <a href="#impact-on-existing-code">Extended discussion about change impact on existing code.</a></li>
		<li><a href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p3372r0.html">R0</a>&#x2005;→&#x2005;<a href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p3372r1.html">R1</a>: Added implementation specific problems with <code>std::less&lt;T*&gt;</code>.</li>
	</ul>
	<h2 id="introduction"><a href="#introduction">Introduction and motivation</a></h2>
	<p>All necessary <code>constexpr</code> functionality required by the containers to be changed is supported by the language. There is no reason for them not to be constexpr, and the standard library should support these in order for them to properly serve as vocabulary types.</p>
	
	<p>The following table shows what this paper proposes, and the status quo:</p>
	<table class="poll before-after">
		<tr><th>container / adapter</th><th>before</th><th>after</th><th class="left">note</th></tr>
		<tr><td><code>std::array</code></td><td class="already">✔︎</td><td class="already">✔︎</td><td class="left">since C++11/14</td></tr>
		<tr><td><code>std::deque</code></td><td class="red">x</td><td class="green">✔︎</td><td class="left"></td></tr>
		<tr><td><code>std::forward_list</code></td><td class="red">x</td><td class="green">✔︎</td><td class="left"></td></tr>
		<tr><td><code>std::list</code></td><td class="red">x</td><td class="green">✔︎</td><td class="left"></td></tr>
		<tr><td><code>std::vector</code></td><td class="already">✔︎</td><td class="already">✔︎</td><td class="left">since C++20 🍫</td></tr>
		<tr><td><code>std::map</code></td><td class="red">x</td><td class="green">✔︎</td><td class="left">using <code>node_handle::key()</code> is UB (<a href="https://cplusplus.github.io/CWG/issues/2514.html">CWG-2514</a>)</td></tr>
		<tr><td><code>std::multimap</code></td><td class="red">x</td><td class="green">✔︎</td><td class="left">using <code>node_handle::key()</code> is UB (<a href="https://cplusplus.github.io/CWG/issues/2514.html">CWG-2514</a>)</td></tr>
		<tr><td><code>std::set</code></td><td class="red">x</td><td class="green">✔︎</td><td class="left"></td></tr>
		<tr><td><code>std::multiset</code></td><td class="red">x</td><td class="green">✔︎</td><td class="left"></td></tr>
		<tr><td><code>std::unordered_map</code></td><td class="red">x</td><td class="green">✔︎</td><td class="left">using <code>node_handle::key()</code> is UB (<a href="https://cplusplus.github.io/CWG/issues/2514.html">CWG-2514</a>, a custom hash function needed)</td></tr>
		<tr><td><code>std::unordered_multimap</code></td><td class="red">x</td><td class="green">✔︎</td><td class="left">using <code>node_handle::key()</code> is UB (<a href="https://cplusplus.github.io/CWG/issues/2514.html">CWG-2514</a>, a custom hash function needed)</td></tr>
		<tr><td><code>std::unordered_set</code></td><td class="red">x</td><td class="green">✔︎</td><td class="left">(a custom hash function needed)</td></tr>
		<tr><td><code>std::unordered_multiset</code></td><td class="red">x</td><td class="green">✔︎</td><td class="left">(a custom hash function needed)</td></tr>
		<tr><td><code>std::queue</code></td><td class="red">x</td><td class="green">✔︎</td><td></td></tr>
		<tr><td><code>std::priority_queue</code></td><td class="red">x</td><td class="green">✔︎</td><td class="left"></td></tr>
		<tr><td><code>std::stack</code></td><td class="red">x</td><td class="green">✔︎</td><td class="left"></td></tr>
		<tr><td><code>std::flat_map</code></td><td class="red">x</td><td class="green">✔︎</td><td class="left">new adapter in C++23, originally proposed for C++20</td></tr>
		<tr><td><code>std::flat_multimap</code></td><td class="red">x</td><td class="green">✔︎</td><td class="left">new adapter in C++23, originally proposed for C++20</td></tr>
		<tr><td><code>std::flat_set</code></td><td class="red">x</td><td class="green">✔︎</td><td class="left">new adapter in C++23, originally proposed for C++20</td></tr>
		<tr><td><code>std::flat_multiset</code></td><td class="red">x</td><td class="green">✔︎</td><td class="left">new adapter in C++23, originally proposed for C++20</td></tr>
		<tr><td><code>std::span</code></td><td class="already">✔︎</td><td class="already">✔︎</td><td class="left"></td></tr>
		<tr><td><code>std::mdspan</code></td><td class="already">✔︎</td><td class="already">✔︎</td><td class="left"></td></tr>
		<tr><td><code>std::basic_string</code></td><td class="already">✔︎</td><td class="already">✔︎</td><td class="left">since C++20 🍫</td></tr>
		<tr><td><code>std::basic_string_view</code></td><td class="already">✔︎</td><td class="already">✔︎</td><td class="left">since C++17</td></tr>
	</table>
	<h2 id="what-is-not-included"><a href="#what-is-not-included">What is not included</a></h2>
	<h3 id="hashing-not-included"><a href="#hashing-not-included"><code>std::hash</code></a></h3>
	<p>Unordered containers needs a hashing facility. But default provided <code>std::hash</code> can't be made <code>constexpr</code> friendly as <a href="http://eel.is/c++draft/tab:cpp17.hash">Cpp17Hash requirements</a> states its result is guaranteed to be consistent only within duration of the program. Intention is to allow salting the hash to avoid cache poisoning attacks. The requirement is in a direct conflict with calculating the hash within constant evaluation. One possible solution would be creating a <code>std::stable_hash</code> facility without such requirement. But this is a can of worms outside of scope of this paper and I'm not brave enough to open it.</p>
	<p>Therefore this paper doesn't propose any change for <code>std::hash</code>. Users can still use unordered containers when they provide their own hashing facility. This situation is not ideal but much better than status quo of not having any such container available at all.</p>
	<h3 id="hive-not-included"><a href="#hive-not-included"><code>std::hive</code></a></h3>
	<p>At time of writing this paper <code>std::hive</code> is not part of the standard draft with stable wording and it's not part of this paper.</p>
  <h3 id="non-transient-allocations"><a href="#non-transient-allocations">Non-transient allocations</a></h3>
  <p>The standard currently <a href="https://eel.is/c++draft/expr.const#5.18">disallows any allocation to "leak" out of constant evaluation [expr.const]</a>. This paper doesn't change anything about this. You still can't use any of allocating containers in a <code>constexpr</code> variable.</p>
	<h2 id="implementation-experience"><a href="#implementation-experience">Implementation experience</a></h2>
  <p>I implemented the proposal in a <a href="https://github.com/hanickadot/llvm-project/tree/P3372-constexpr-containers-and-adaptors">personal fork</a> of libc++ by marking all functions and member functions associated with containers with <code>constexpr</code>. Containers <code>deque</code>, <code>forward_list</code>, <code>list</code>, and all adaptors (note: libc++ doesn't have flat_map and flat_set yet) were modified without any problem.</p>
  <p>When marking <code>set</code>, <code>map</code>, <code>unordered_set</code>, and <code>unordered_map</code> I ran into <a href="https://github.com/llvm/llvm-project/issues/102547">problems with UB in the construction of nodes</a>, where the node is allocated but not constructed and only its subobject with value is constructed. Another UB I ran into was type-punning via <code>union</code> and <code>static_cast</code> from <code>size_t</code> into <code>unsigned char</code> when calculating hash; both these issues were fixed by using <code>std::bit_cast</code> instead. This is actually a good argument for <em>constexpr ALL the things</em> as proper testing during <em>constant evaluation</em> can easily catch such problems.</p>
  <p><a href="https://compiler-explorer.com/z/j4bWWs4eb">Here</a> are examples with iterators and <a href="https://compiler-explorer.com/z/5K5dTbxeM">here</a> are examples with normal operations.</p>
  <h3 id="hashTstar"><a href="#hashTstar"><code>std::hash&lt;T *&gt;</a></code></h3>
	<p>As part of implementation I tried to make <code>std::hash</code> completely constexpr, biggest problem I ran into was hashing of pointers. As constant evaluator evaluate symbolically a pointer to allocated memory (which can't survive to runtime) or to static symbol are of different values than in runtime.</p>
	<p>I was able to create a modification to <code>bitcast</code> builtin to give me a unique integer representation of the pointer. But this was an exercise in futility as allowing such hashing (even if we have stable hashing) would lead to inconsistency between constexpr and runtime hash of same object. And this is something undesirable.</p>
	<h3 id="less"><a href="#less"><code>std::less&lt;T *&gt;</code> and friends</a></h3>
  <p>Similar problem as with <a href="#hash"><code>std::hash</code></a> is present in <code>std::less</code> and other comparison functors too. Interpreter of constant evaluated code doesn't know addresses of objects during normal execution of program (subject to optimizer, linker, and <a href="https://en.wikipedia.org/wiki/Address_space_layout_randomization">ASLR</a> changes). If we allow comparing pointers with an implementation specific strict total ordering (as specified for functors and currently not implementable for constant evaluation) the final ordering of pointers won't be same as in runtime.</p>
  <h3 id="node-handle-key"><a href="#node-handle-key"><code>key &amp; node_handle::key()</code></a></h3>
  <p>Another problem I ran into is the already existing <a href="https://cplusplus.github.io/CWG/issues/2514.html">CWG-2514</a> where <code>node_handle::key()</code> returns non-const reference to <code>key</code> which is <code>const</code> inside <code>node_type</code>. This disallows making the member function <code>constexpr</code> and is not included in proposal. If solutuon of <a href="https://cplusplus.github.io/CWG/issues/2514.html">CWG-2514</a> finds solution how to fix the problem without having UB then <code>constexpr</code> should be added as part of the resolution.</p>
	<p>It was recommended by a member of LEWG to remove all <code>constexpr</code> functionality from <code>node-handle</code> but I find the functionality even limited to be better than not having it available as point of making things <code>constexpr</code> is to remove arbitrary limitations.</p>
	<h3 id="libstdcxx"><a href="#libstdcxx">libstdc++</a></h3>
	<p>Parts of implementation of containers are in .cc files instead of headers and needs to be moved there:</p>
	<p><ul>
		<li>Containers <a href="https://compiler-explorer.com/z/39MsxKxTT"><code>deque</code></a> (<code>_Deque_base</code>), <a href="https://compiler-explorer.com/z/GqoWh7one"><code>forward_list</code></a> (<code>_Fwd_list_node_base</code>), <a href="https://compiler-explorer.com/z/zzYc5efcz"><code>list</code></a> (<code>_List_node_base</code>) have defined their node bases in .cc files.</li>
		<li>Associative containers <code>set</code>, <code>multi_set</code>, <code>map</code>, and <code>multi_map</code> are using <a href="https://compiler-explorer.com/z/T4b9fxzT9">Red-Black Tree</a> implementation in a .cc file.</li>
		<li>Adapters <a href="https://compiler-explorer.com/z/hqE8sTfeE"><code>queue</code></a> and <a href="https://compiler-explorer.com/z/9xb6bTceb"><code>stack</code></a> inherits <a href="https://compiler-explorer.com/z/39MsxKxTT"><code>deque</code>'s problem</a> with <code>_Deque_base</code> in a .cc file.</li>
	</ul></p>
	<p>Other than that I wasn't able to use unordered associative containers as <code>unordered_map</code> and <code>unordered_set</code> defaulted destructors <a href="https://compiler-explorer.com/z/We7T1bs47">doesn't want to call non-constexpr destructor</a> of internal <code>_Hashtable</code> common type (seems as a limitation of <code>-fimplicit-constexpr</code> mode), but by some looking at the code, there doesn't seem to be anything significant problem there.</p>
	<p>There is no usage of <code>reinterpret_cast</code> in container library, only occurence is TR1 <code>hash_table</code> implementation which is irrelevant to this paper. No flat associative container is implemented yet.</p>
	<p>Adapter <a href="https://compiler-explorer.com/z/vsT9rEcMM"><code>priority_queue</code></a> is usable without problem as it is based on <code>vector</code> 🎉🎉</p>
	
	<h2 id="impact-on-existing-code"><a href="#impact-on-existing-code">Impact on existing code</a></h2>
	<p>None on user code, this is purely an API extension as the previous API wasn't usable in constexpr, and all types are templates and must be available in headers already. Some implementation can have parts of the internals of containers hidden inside of .cpp files and these needs to be moved to headers / modules in order to make containers fully functional within constant evaluation.</p>
	<h2 id="notes-for-wording-changes"><a href="#notes-for-wording-changes">Notes for wording changes</a></h2>
  <p>Mechanically mark all functionality in [<a href="http://eel.is/c++draft/containers">container</a>] constexpr with exception of <code><em>node-handle</em>::mapped()</code> (which is subject of <a href="https://cplusplus.github.io/CWG/issues/2514.html">CWG-2514</a>). Also make sure all iterator types are constexpr.</p>
	<h2 id="wording"><a href="#wording">Proposed changes to wording</a></h2>
	<div class="wording">
		<h1 ><a class='secnum' style='min-width:50pt'>24</a> Containers library <a class='abbr_ref' href='./#containers'>[containers]</a></h1><div id='general' class='section'>

<div id='container.node' class='section'><h3 ><a class='secnum' href='#container.node' style='min-width:80pt'>24.2.5</a> Node handles <a class='abbr_ref' href='container.node'>[container.node]</a></h3><div id='container.node.overview' class='section'><h4 ><a class='secnum' href='#container.node.overview' style='min-width:95pt'>24.2.5.1</a> Overview <a class='abbr_ref' href='container.node.overview'>[container.node.overview]</a></h4><div class='para' id='container.node.overview-1'><div class='marginalizedparent'><a class='marginalized' href='#container.node.overview-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L2239'>#</a></div><div class='texpara'><div id='container.node.overview-1.sentence-1' class='sentence'>A <a class='hidden_link' href='#def:node_handle' title='24.2.5.1&emsp;Overview&emsp;[container.node.overview]'><span id='def:node_handle'><i >node handle</i></span></a> is an object that accepts ownership of a single element
from an associative container (<a href='#associative.reqmts' title='24.2.7&emsp;Associative containers'>[associative.<span class='shy'></span>reqmts]</a>) or an unordered
associative container (<a href='#unord.req' title='24.2.8&emsp;Unordered associative containers'>[unord.<span class='shy'></span>req]</a>)<a class='hidden_link' href='#container.node.overview-1.sentence-1'>.</a></div> <div id='container.node.overview-1.sentence-2' class='sentence'>It may be used to transfer that
ownership to another container with compatible nodes<a class='hidden_link' href='#container.node.overview-1.sentence-2'>.</a></div> <div id='container.node.overview-1.sentence-3' class='sentence'>Containers with
compatible nodes have the same node handle type<a class='hidden_link' href='#container.node.overview-1.sentence-3'>.</a></div> <div id='container.node.overview-1.sentence-4' class='sentence'>Elements may be transferred in
either direction between container types in the same row of
Table <a href='#tab:container.node.compat' title='Table 86: Container types with compatible nodes'>86</a><a class='hidden_link' href='#container.node.overview-1.sentence-4'>.</a></div></div><div class='texpara'><div class='numberedTable' id='tab:container.node.compat'>Table <a href='#tab:container.node.compat'>86</a>: Container types with compatible nodes&emsp;<a href='./tab:container.node.compat'>[tab:container.node.compat]</a><br><table ><tr id='tab:container.node.compat-row-1' class='rowsep'><td class='hidden'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:container.node.compat-row-1'>🔗</a></div></td><td class='left'><div class='texpara'><div id='tab:container.node.compat-row-1-column-1-sentence-1' class='sentence'><span class='texttt'>map<span class='anglebracket'>&lt;</span>K, T, C1, A<span class='anglebracket'>&gt;</span></span></div></div></td><td class='left'><div class='texpara'><div id='tab:container.node.compat-row-1-column-2-sentence-1' class='sentence'><span class='texttt'>map<span class='anglebracket'>&lt;</span>K, T, C2, A<span class='anglebracket'>&gt;</span></span></div></div></td></tr><tr id='tab:container.node.compat-row-2' class='rowsep'><td class='hidden'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:container.node.compat-row-2'>🔗</a></div></td><td class='left'><div class='texpara'><div id='tab:container.node.compat-row-2-column-1-sentence-1' class='sentence'><span class='texttt'>map<span class='anglebracket'>&lt;</span>K, T, C1, A<span class='anglebracket'>&gt;</span></span></div></div></td><td class='left'><div class='texpara'><div id='tab:container.node.compat-row-2-column-2-sentence-1' class='sentence'><span class='texttt'>multimap<span class='anglebracket'>&lt;</span>K, T, C2, A<span class='anglebracket'>&gt;</span></span></div></div></td></tr><tr id='tab:container.node.compat-row-3' class='rowsep'><td class='hidden'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:container.node.compat-row-3'>🔗</a></div></td><td class='left'><div class='texpara'><div id='tab:container.node.compat-row-3-column-1-sentence-1' class='sentence'><span class='texttt'>set<span class='anglebracket'>&lt;</span>K, C1, A<span class='anglebracket'>&gt;</span></span></div></div></td><td class='left'><div class='texpara'><div id='tab:container.node.compat-row-3-column-2-sentence-1' class='sentence'><span class='texttt'>set<span class='anglebracket'>&lt;</span>K, C2, A<span class='anglebracket'>&gt;</span></span></div></div></td></tr><tr id='tab:container.node.compat-row-4' class='rowsep'><td class='hidden'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:container.node.compat-row-4'>🔗</a></div></td><td class='left'><div class='texpara'><div id='tab:container.node.compat-row-4-column-1-sentence-1' class='sentence'><span class='texttt'>set<span class='anglebracket'>&lt;</span>K, C1, A<span class='anglebracket'>&gt;</span></span></div></div></td><td class='left'><div class='texpara'><div id='tab:container.node.compat-row-4-column-2-sentence-1' class='sentence'><span class='texttt'>multiset<span class='anglebracket'>&lt;</span>K, C2, A<span class='anglebracket'>&gt;</span></span></div></div></td></tr><tr id='tab:container.node.compat-row-5' class='rowsep'><td class='hidden'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:container.node.compat-row-5'>🔗</a></div></td><td class='left'><div class='texpara'><div id='tab:container.node.compat-row-5-column-1-sentence-1' class='sentence'><span class='texttt'>unordered_<span class='shy'></span>map<span class='anglebracket'>&lt;</span>K, T, H1, E1, A<span class='anglebracket'>&gt;</span></span></div></div></td><td class='left'><div class='texpara'><div id='tab:container.node.compat-row-5-column-2-sentence-1' class='sentence'><span class='texttt'>unordered_<span class='shy'></span>map<span class='anglebracket'>&lt;</span>K, T, H2, E2, A<span class='anglebracket'>&gt;</span></span></div></div></td></tr><tr id='tab:container.node.compat-row-6' class='rowsep'><td class='hidden'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:container.node.compat-row-6'>🔗</a></div></td><td class='left'><div class='texpara'><div id='tab:container.node.compat-row-6-column-1-sentence-1' class='sentence'><span class='texttt'>unordered_<span class='shy'></span>map<span class='anglebracket'>&lt;</span>K, T, H1, E1, A<span class='anglebracket'>&gt;</span></span></div></div></td><td class='left'><div class='texpara'><div id='tab:container.node.compat-row-6-column-2-sentence-1' class='sentence'><span class='texttt'>unordered_<span class='shy'></span>multimap<span class='anglebracket'>&lt;</span>K, T, H2, E2, A<span class='anglebracket'>&gt;</span></span></div></div></td></tr><tr id='tab:container.node.compat-row-7' class='rowsep'><td class='hidden'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:container.node.compat-row-7'>🔗</a></div></td><td class='left'><div class='texpara'><div id='tab:container.node.compat-row-7-column-1-sentence-1' class='sentence'><span class='texttt'>unordered_<span class='shy'></span>set<span class='anglebracket'>&lt;</span>K, H1, E1, A<span class='anglebracket'>&gt;</span></span></div></div></td><td class='left'><div class='texpara'><div id='tab:container.node.compat-row-7-column-2-sentence-1' class='sentence'><span class='texttt'>unordered_<span class='shy'></span>set<span class='anglebracket'>&lt;</span>K, H2, E2, A<span class='anglebracket'>&gt;</span></span></div></div></td></tr><tr id='tab:container.node.compat-row-8' class='rowsep'><td class='hidden'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:container.node.compat-row-8'>🔗</a></div></td><td class='left'><div class='texpara'><div id='tab:container.node.compat-row-8-column-1-sentence-1' class='sentence'><span class='texttt'>unordered_<span class='shy'></span>set<span class='anglebracket'>&lt;</span>K, H1, E1, A<span class='anglebracket'>&gt;</span></span></div></div></td><td class='left'><div class='texpara'><div id='tab:container.node.compat-row-8-column-2-sentence-1' class='sentence'><span class='texttt'>unordered_<span class='shy'></span>multiset<span class='anglebracket'>&lt;</span>K, H2, E2, A<span class='anglebracket'>&gt;</span></span></div></div></td></tr></table></div></div></div><div class='para' id='container.node.overview-2'><div class='marginalizedparent'><a class='marginalized' href='#container.node.overview-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L2268'>#</a></div><div class='texpara'><div id='container.node.overview-2.sentence-1' class='sentence'>If a node handle is not empty, then it contains an allocator that is equal to
the allocator of the container when the element was extracted<a class='hidden_link' href='#container.node.overview-2.sentence-1'>.</a></div> <div id='container.node.overview-2.sentence-2' class='sentence'>If a node handle
is empty, it contains no allocator<a class='hidden_link' href='#container.node.overview-2.sentence-2'>.</a></div></div></div><div class='para' id='container.node.overview-3'><div class='marginalizedparent'><a class='marginalized' href='#container.node.overview-3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L2273'>#</a></div><div class='texpara'><div id='container.node.overview-3.sentence-1' class='sentence'>Class <span class='texttt'><i >node-handle</i></span> is for exposition only<a class='hidden_link' href='#container.node.overview-3.sentence-1'>.</a></div></div></div><div class='para' id='container.node.overview-4'><div class='marginalizedparent'><a class='marginalized' href='#container.node.overview-4'>4</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L2276'>#</a></div><div class='texpara'><div id='container.node.overview-4.sentence-1' class='sentence'>If a user-defined specialization of <span class='texttt'>pair</span> exists for
<span class='texttt'>pair<span class='anglebracket'>&lt;</span><span class='keyword'>const</span> Key, T<span class='anglebracket'>&gt;</span></span> or <span class='texttt'>pair<span class='anglebracket'>&lt;</span>Key, T<span class='anglebracket'>&gt;</span></span>, where <span class='texttt'>Key</span> is the
container's <span class='texttt'>key_<span class='shy'></span>type</span> and <span class='texttt'>T</span> is the container's
<span class='texttt'>mapped_<span class='shy'></span>type</span>, the behavior of operations involving node handles is
undefined<a class='hidden_link' href='#container.node.overview-4.sentence-1'>.</a></div></div><div class='texpara'><span class='codeblock'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><i ><span class='texttt'>unspecified</span></i><span class='anglebracket'>&gt;</span>
<span class='keyword'>class</span> <i >node-handle</i> <span class='curlybracket'>{</span>
<span class='keyword'>public</span><span class='operator'>:</span>
  <span class='comment'>// These type declarations are described in <a href='#associative.reqmts' title='24.2.7&emsp;Associative containers'>[associative.<span class='shy'></span>reqmts]</a> and <a href='#unord.req' title='24.2.8&emsp;Unordered associative containers'>[unord.<span class='shy'></span>req]</a>.</span>
  <span class='keyword'>using</span> value_type     <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;     <span class='comment'>// not present for map containers</span>
  <span class='keyword'>using</span> key_type       <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;     <span class='comment'>// not present for set containers</span>
  <span class='keyword'>using</span> mapped_type    <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;     <span class='comment'>// not present for set containers</span>
  <span class='keyword'>using</span> allocator_type <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;

<span class='keyword'>private</span><span class='operator'>:</span>
  <span class='keyword'>using</span> container_node_type <span class='operator'>=</span> <i ><span class='texttt'>unspecified</span></i>;                  <span class='comment'>// <i >exposition only</i></span>
  <span class='keyword'>using</span> ator_traits <span class='operator'>=</span> allocator_traits<span class='anglebracket'>&lt;</span>allocator_type<span class='anglebracket'>&gt;</span>;     <span class='comment'>// <i >exposition only</i></span>

  <span class='keyword'>typename</span> ator_traits<span class='operator'>::</span><span class='keyword'>template</span>
    rebind_traits<span class='anglebracket'>&lt;</span>container_node_type<span class='anglebracket'>&gt;</span><span class='operator'>::</span>pointer ptr_;       <span class='comment'>// <i >exposition only</i></span>
  optional<span class='anglebracket'>&lt;</span>allocator_type<span class='anglebracket'>&gt;</span> alloc_;                          <span class='comment'>// <i >exposition only</i></span>

<span class='keyword'>public</span><span class='operator'>:</span>
  <span class='comment'>// <a href='#container.node.cons' title='24.2.5.2&emsp;Constructors, copy, and assignment'>[container.<span class='shy'></span>node.<span class='shy'></span>cons]</a>, constructors, copy, and assignment</span>
  <span class='keyword'>constexpr</span> <i >node-handle</i><span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span> <span class='operator'>:</span> ptr_<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, alloc_<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>
  <span class='keyword added'>constexpr</span> <i >node-handle</i><span class='parenthesis'>(</span><i >node-handle</i><span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
  <span class='keyword added'>constexpr</span> <i >node-handle</i><span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span><i >node-handle</i><span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span>;

  <span class='comment'>// <a href='#container.node.dtor' title='24.2.5.3&emsp;Destructor'>[container.<span class='shy'></span>node.<span class='shy'></span>dtor]</a>, destructor</span>
  <span class='keyword added'>constexpr</span> <span class='operator'>~</span><i >node-handle</i><span class='parenthesis'>(</span><span class='parenthesis'>)</span>;

  <span class='comment'>// <a href='#container.node.observers' title='24.2.5.4&emsp;Observers'>[container.<span class='shy'></span>node.<span class='shy'></span>observers]</a>, observers</span>
  <span class='keyword added'>constexpr</span> value_type<span class='operator'>&amp;</span> value<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;            <span class='comment'>// not present for map containers</span>
  key_type<span class='operator'>&amp;</span> key<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;                <span class='comment'>// not present for set containers</span>
  <span class='keyword added'>constexpr</span> mapped_type<span class='operator'>&amp;</span> mapped<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;          <span class='comment'>// not present for set containers</span>

  <span class='keyword added'>constexpr</span> allocator_type get_allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
  <span class='keyword added'>constexpr</span> <span class='keyword'>explicit</span> <span class='keyword'>operator</span> <span class='keyword'>bool</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
  <span class='keyword added'>constexpr</span> <span class='keyword'>bool</span> empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

  <span class='comment'>// <a href='#container.node.modifiers' title='24.2.5.5&emsp;Modifiers'>[container.<span class='shy'></span>node.<span class='shy'></span>modifiers]</a>, modifiers</span>
  <span class='keyword added'>constexpr</span> <span class='keyword'>void</span> swap<span class='parenthesis'>(</span><i >node-handle</i><span class='operator'>&amp;</span><span class='parenthesis'>)</span>
    <span class='keyword'>noexcept</span><span class='parenthesis'>(</span>ator_traits<span class='operator'>::</span>propagate_on_container_swap<span class='operator'>::</span>value <span class='operator'>|</span><span class='operator'>|</span>
             ator_traits<span class='operator'>::</span>is_always_equal<span class='operator'>::</span>value<span class='parenthesis'>)</span>;

  <span class='keyword added'>constexpr</span> <span class='keyword'>friend</span> <span class='keyword'>void</span> swap<span class='parenthesis'>(</span><i >node-handle</i><span class='operator'>&amp;</span> x, <i >node-handle</i><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span> <span class='keyword'>noexcept</span><span class='parenthesis'>(</span><span class='keyword'>noexcept</span><span class='parenthesis'>(</span>x<span class='operator'>.</span>swap<span class='parenthesis'>(</span>y<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
    x<span class='operator'>.</span>swap<span class='parenthesis'>(</span>y<span class='parenthesis'>)</span>;
  <span class='curlybracket'>}</span>
<span class='curlybracket'>}</span>;
</span></div></div></div><div id='container.node.cons' class='section'><h4 ><a class='secnum' href='#container.node.cons' style='min-width:95pt'>24.2.5.2</a> Constructors, copy, and assignment <a class='abbr_ref' href='container.node.cons'>[container.node.cons]</a></h4><div class='texpara'><div class='itemdecl' id='container.node.cons-itemdecl:1'><div class='marginalizedparent'><a class='itemDeclLink' href='#container.node.cons-itemdecl:1'>🔗</a></div><code class='itemdeclcode'><span class='keyword added'>constexpr</span> <i >node-handle</i><span class='parenthesis'>(</span><i >node-handle</i><span class='operator'>&amp;</span><span class='operator'>&amp;</span> nh<span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
</code></div></div><div class='para' id='container.node.cons-1'><div class='marginalizedparent'><a class='marginalized' href='#container.node.cons-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L2337'>#</a></div><div class='texpara'><div id='container.node.cons-1.sentence-1' class='sentence'><i >Effects</i>: Constructs a <span class='texttt'><i >node-handle</i></span> object initializing
<span class='texttt'>ptr_<span class='shy'></span></span> with <span class='texttt'>nh<span class='operator'>.</span>ptr_<span class='shy'></span></span><a class='hidden_link' href='#container.node.cons-1.sentence-1'>.</a></div> <div id='container.node.cons-1.sentence-2' class='sentence'>Move constructs <span class='texttt'>alloc_<span class='shy'></span></span> with
<span class='texttt'>nh<span class='operator'>.</span>alloc_<span class='shy'></span></span><a class='hidden_link' href='#container.node.cons-1.sentence-2'>.</a></div> <div id='container.node.cons-1.sentence-3' class='sentence'>Assigns <span id=':nullptr'><span class='texttt'><span class='literal'>nullptr</span></span></span> to <span class='texttt'>nh<span class='operator'>.</span>ptr_<span class='shy'></span></span> and assigns
<span class='texttt'>nullopt</span> to <span class='texttt'>nh<span class='operator'>.</span>alloc_<span class='shy'></span></span><a class='hidden_link' href='#container.node.cons-1.sentence-3'>.</a></div></div></div></div><div class='texpara'><div class='itemdecl' id='container.node.cons-itemdecl:2'><div class='marginalizedparent'><a class='itemDeclLink' href='#container.node.cons-itemdecl:2'>🔗</a></div><code class='itemdeclcode'><span class='keyword added'>constexpr</span> <i >node-handle</i><span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span><i >node-handle</i><span class='operator'>&amp;</span><span class='operator'>&amp;</span> nh<span class='parenthesis'>)</span>;
</code></div></div><div class='para' id='container.node.cons-2'><div class='marginalizedparent'><a class='marginalized' href='#container.node.cons-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L2350'>#</a></div><div class='texpara'><div id='container.node.cons-2.sentence-1' class='sentence'><i >Preconditions</i>: Either <span class='texttt'><span class='operator'>!</span>alloc_<span class='shy'></span></span>, or
<span class='texttt'>ator_<span class='shy'></span>traits<span class='operator'>&#x200b;::&#x200b;</span>propagate_<span class='shy'></span>on_<span class='shy'></span>container_<span class='shy'></span>move_<span class='shy'></span>assignment<span class='operator'>&#x200b;::&#x200b;</span>value</span>
is <span class='texttt'><span class='literal'>true</span></span>, or <span class='texttt'>alloc_<span class='shy'></span> <span class='operator'>=</span><span class='operator'>=</span>  nh<span class='operator'>.</span>alloc_<span class='shy'></span></span><a class='hidden_link' href='#container.node.cons-2.sentence-1'>.</a></div></div></div></div><div class='para' id='container.node.cons-3'><div class='marginalizedparent'><a class='marginalized' href='#container.node.cons-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L2356'>#</a></div><div class='texpara'><div id='container.node.cons-3.sentence-1' class='sentence'><i >Effects</i>: <ul class='itemize'><li id='container.node.cons-3.1'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#container.node.cons-3.1'>(3.1)</a></div><div class='texpara'><div id='container.node.cons-3.1.sentence-1' class='sentence'>If <span class='texttt'>ptr_<span class='shy'></span> <span class='operator'>!</span><span class='operator'>=</span> <span class='literal'>nullptr</span></span>, destroys the <span class='texttt'>value_<span class='shy'></span>type</span>
subobject in the <span class='texttt'>container_<span class='shy'></span>node_<span class='shy'></span>type</span> object pointed to by <span class='texttt'>ptr_<span class='shy'></span></span>
by calling <span class='texttt'>ator_<span class='shy'></span>traits<span class='operator'>&#x200b;::&#x200b;</span>destroy</span>, then deallocates <span class='texttt'>ptr_<span class='shy'></span></span> by
calling <span class='texttt'>ator_<span class='shy'></span>traits<span class='operator'>&#x200b;::&#x200b;</span><span class='keyword'>template</span> rebind_<span class='shy'></span>traits<span class='anglebracket'>&lt;</span>container_<span class='shy'></span>node_<span class='shy'></span>type<span class='anglebracket'>&gt;</span><span class='operator'>&#x200b;::&#x200b;</span>deallocate</span><a class='hidden_link' href='#container.node.cons-3.1.sentence-1'>.</a></div></div></li><li id='container.node.cons-3.2'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#container.node.cons-3.2'>(3.2)</a></div><div class='texpara'><div id='container.node.cons-3.2.sentence-1' class='sentence'>Assigns <span class='texttt'>nh<span class='operator'>.</span>ptr_<span class='shy'></span></span> to <span class='texttt'>ptr_<span class='shy'></span></span><a class='hidden_link' href='#container.node.cons-3.2.sentence-1'>.</a></div></div></li><li id='container.node.cons-3.3'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#container.node.cons-3.3'>(3.3)</a></div><div class='texpara'><div id='container.node.cons-3.3.sentence-1' class='sentence'>If <span class='texttt'><span class='operator'>!</span>alloc_<span class='shy'></span></span> or <span class='texttt'>ator_<span class='shy'></span>traits<span class='operator'>&#x200b;::&#x200b;</span>propagate_<span class='shy'></span>on_<span class='shy'></span>container_<span class='shy'></span>move_<span class='shy'></span>assignment<span class='operator'>&#x200b;::&#x200b;</span>value</span>
is <span class='texttt'><span class='literal'>true</span></span>, move assigns <span class='texttt'>nh<span class='operator'>.</span>alloc_<span class='shy'></span></span> to <span class='texttt'>alloc_<span class='shy'></span></span><a class='hidden_link' href='#container.node.cons-3.3.sentence-1'>.</a></div></div></li><li id='container.node.cons-3.4'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#container.node.cons-3.4'>(3.4)</a></div><div class='texpara'><div id='container.node.cons-3.4.sentence-1' class='sentence'>Assigns
<span id=':nullptr_'><span class='texttt'><span class='literal'>nullptr</span></span></span> to <span class='texttt'>nh<span class='operator'>.</span>ptr_<span class='shy'></span></span> and assigns <span class='texttt'>nullopt</span> to
<span class='texttt'>nh<span class='operator'>.</span>alloc_<span class='shy'></span></span><a class='hidden_link' href='#container.node.cons-3.4.sentence-1'>.</a></div></div></li></ul></div></div></div></div><div class='para' id='container.node.cons-4'><div class='marginalizedparent'><a class='marginalized' href='#container.node.cons-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L2375'>#</a></div><div class='texpara'><div id='container.node.cons-4.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'><span class='operator'>*</span><span class='keyword'>this</span></span><a class='hidden_link' href='#container.node.cons-4.sentence-1'>.</a></div></div></div></div><div class='para' id='container.node.cons-5'><div class='marginalizedparent'><a class='marginalized' href='#container.node.cons-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L2379'>#</a></div><div class='texpara'><div id='container.node.cons-5.sentence-1' class='sentence'><i >Throws</i>: Nothing<a class='hidden_link' href='#container.node.cons-5.sentence-1'>.</a></div></div></div></div></div><div id='container.node.dtor' class='section'><h4 ><a class='secnum' href='#container.node.dtor' style='min-width:95pt'>24.2.5.3</a> Destructor <a class='abbr_ref' href='container.node.dtor'>[container.node.dtor]</a></h4><div class='texpara'><div class='itemdecl' id='container.node.dtor-itemdecl:1'><div class='marginalizedparent'><a class='itemDeclLink' href='#container.node.dtor-itemdecl:1'>🔗</a></div><code class='itemdeclcode'><span class='keyword added'>constexpr</span> <span class='operator'>~</span><i >node-handle</i><span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
</code></div></div><div class='para' id='container.node.dtor-1'><div class='marginalizedparent'><a class='marginalized' href='#container.node.dtor-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L2391'>#</a></div><div class='texpara'><div id='container.node.dtor-1.sentence-1' class='sentence'><i >Effects</i>: If <span class='texttt'>ptr_<span class='shy'></span> <span class='operator'>!</span><span class='operator'>=</span> <span class='literal'>nullptr</span></span>, destroys the <span class='texttt'>value_<span class='shy'></span>type</span> subobject
in the <span class='texttt'>container_<span class='shy'></span>node_<span class='shy'></span>type</span> object pointed to by <span class='texttt'>ptr_<span class='shy'></span></span> by calling
<span class='texttt'>ator_<span class='shy'></span>traits<span class='operator'>&#x200b;::&#x200b;</span>destroy</span>, then deallocates <span class='texttt'>ptr_<span class='shy'></span></span> by calling
<span class='texttt'>ator_<span class='shy'></span>traits<span class='operator'>&#x200b;::&#x200b;</span><span class='keyword'>template</span> rebind_<span class='shy'></span>traits<span class='anglebracket'>&lt;</span>container_<span class='shy'></span>node_<span class='shy'></span>type<span class='anglebracket'>&gt;</span><span class='operator'>&#x200b;::&#x200b;</span>deallocate</span><a class='hidden_link' href='#container.node.dtor-1.sentence-1'>.</a></div></div></div></div></div><div id='container.node.observers' class='section'><h4 ><a class='secnum' href='#container.node.observers' style='min-width:95pt'>24.2.5.4</a> Observers <a class='abbr_ref' href='container.node.observers'>[container.node.observers]</a></h4><div class='texpara'><div class='itemdecl' id='container.node.observers-itemdecl:1'><div class='marginalizedparent'><a class='itemDeclLink' href='#container.node.observers-itemdecl:1'>🔗</a></div><code class='itemdeclcode'><span class='keyword added'>constexpr</span> value_type<span class='operator'>&amp;</span> value<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div><div class='para' id='container.node.observers-1'><div class='marginalizedparent'><a class='marginalized' href='#container.node.observers-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L2406'>#</a></div><div class='texpara'><div id='container.node.observers-1.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> <span class='literal'>false</span></span><a class='hidden_link' href='#container.node.observers-1.sentence-1'>.</a></div></div></div></div><div class='para' id='container.node.observers-2'><div class='marginalizedparent'><a class='marginalized' href='#container.node.observers-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L2410'>#</a></div><div class='texpara'><div id='container.node.observers-2.sentence-1' class='sentence'><i >Returns</i>: A reference to the <span class='texttt'>value_<span class='shy'></span>type</span> subobject in the
<span class='texttt'>container_<span class='shy'></span>node_<span class='shy'></span>type</span> object pointed to by <span class='texttt'>ptr_<span class='shy'></span></span><a class='hidden_link' href='#container.node.observers-2.sentence-1'>.</a></div></div></div></div><div class='para' id='container.node.observers-3'><div class='marginalizedparent'><a class='marginalized' href='#container.node.observers-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L2415'>#</a></div><div class='texpara'><div id='container.node.observers-3.sentence-1' class='sentence'><i >Throws</i>: Nothing<a class='hidden_link' href='#container.node.observers-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div class='itemdecl' id='container.node.observers-itemdecl:2'><div class='marginalizedparent'><a class='itemDeclLink' href='#container.node.observers-itemdecl:2'>🔗</a></div><code class='itemdeclcode'>key_type<span class='operator'>&amp;</span> key<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div><div class='para' id='container.node.observers-4'><div class='marginalizedparent'><a class='marginalized' href='#container.node.observers-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L2425'>#</a></div><div class='texpara'><div id='container.node.observers-4.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> <span class='literal'>false</span></span><a class='hidden_link' href='#container.node.observers-4.sentence-1'>.</a></div></div></div></div><div class='para' id='container.node.observers-5'><div class='marginalizedparent'><a class='marginalized' href='#container.node.observers-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L2429'>#</a></div><div class='texpara'><div id='container.node.observers-5.sentence-1' class='sentence'><i >Returns</i>: A non-const reference to the <span class='texttt'>key_<span class='shy'></span>type</span> member of the
<span class='texttt'>value_<span class='shy'></span>type</span> subobject in the <span class='texttt'>container_<span class='shy'></span>node_<span class='shy'></span>type</span> object
pointed to by <span class='texttt'>ptr_<span class='shy'></span></span><a class='hidden_link' href='#container.node.observers-5.sentence-1'>.</a></div></div></div></div><div class='para' id='container.node.observers-6'><div class='marginalizedparent'><a class='marginalized' href='#container.node.observers-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L2435'>#</a></div><div class='texpara'><div id='container.node.observers-6.sentence-1' class='sentence'><i >Throws</i>: Nothing<a class='hidden_link' href='#container.node.observers-6.sentence-1'>.</a></div></div></div></div><div class='para' id='container.node.observers-7'><div class='marginalizedparent'><a class='marginalized' href='#container.node.observers-7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L2439'>#</a></div><div class='texpara'><div id='container.node.observers-7.sentence-1' class='sentence'><i >Remarks</i>: Modifying the key through the returned reference is permitted<a class='hidden_link' href='#container.node.observers-7.sentence-1'>.</a></div></div></div></div><div class='texpara'><div class='itemdecl' id='container.node.observers-itemdecl:3'><div class='marginalizedparent'><a class='itemDeclLink' href='#container.node.observers-itemdecl:3'>🔗</a></div><code class='itemdeclcode'><span class='keyword added'>constexpr</span> mapped_type<span class='operator'>&amp;</span> mapped<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div><div class='para' id='container.node.observers-8'><div class='marginalizedparent'><a class='marginalized' href='#container.node.observers-8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L2449'>#</a></div><div class='texpara'><div id='container.node.observers-8.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> <span class='literal'>false</span></span><a class='hidden_link' href='#container.node.observers-8.sentence-1'>.</a></div></div></div></div><div class='para' id='container.node.observers-9'><div class='marginalizedparent'><a class='marginalized' href='#container.node.observers-9'>9</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L2453'>#</a></div><div class='texpara'><div id='container.node.observers-9.sentence-1' class='sentence'><i >Returns</i>: A reference to the <span class='texttt'>mapped_<span class='shy'></span>type</span> member of the
<span class='texttt'>value_<span class='shy'></span>type</span> subobject in the <span class='texttt'>container_<span class='shy'></span>node_<span class='shy'></span>type</span> object
pointed to by <span class='texttt'>ptr_<span class='shy'></span></span><a class='hidden_link' href='#container.node.observers-9.sentence-1'>.</a></div></div></div></div><div class='para' id='container.node.observers-10'><div class='marginalizedparent'><a class='marginalized' href='#container.node.observers-10'>10</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L2459'>#</a></div><div class='texpara'><div id='container.node.observers-10.sentence-1' class='sentence'><i >Throws</i>: Nothing<a class='hidden_link' href='#container.node.observers-10.sentence-1'>.</a></div></div></div></div><div class='texpara'><div class='itemdecl' id='container.node.observers-itemdecl:4'><div class='marginalizedparent'><a class='itemDeclLink' href='#container.node.observers-itemdecl:4'>🔗</a></div><code class='itemdeclcode'><span class='keyword added'>constexpr</span> allocator_type get_allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div><div class='para' id='container.node.observers-11'><div class='marginalizedparent'><a class='marginalized' href='#container.node.observers-11'>11</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L2470'>#</a></div><div class='texpara'><div id='container.node.observers-11.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> <span class='literal'>false</span></span><a class='hidden_link' href='#container.node.observers-11.sentence-1'>.</a></div></div></div></div><div class='para' id='container.node.observers-12'><div class='marginalizedparent'><a class='marginalized' href='#container.node.observers-12'>12</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L2474'>#</a></div><div class='texpara'><div id='container.node.observers-12.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'><span class='operator'>*</span>alloc_<span class='shy'></span></span><a class='hidden_link' href='#container.node.observers-12.sentence-1'>.</a></div></div></div></div><div class='para' id='container.node.observers-13'><div class='marginalizedparent'><a class='marginalized' href='#container.node.observers-13'>13</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L2478'>#</a></div><div class='texpara'><div id='container.node.observers-13.sentence-1' class='sentence'><i >Throws</i>: Nothing<a class='hidden_link' href='#container.node.observers-13.sentence-1'>.</a></div></div></div></div><div class='texpara'><div class='itemdecl' id='container.node.observers-itemdecl:5'><div class='marginalizedparent'><a class='itemDeclLink' href='#container.node.observers-itemdecl:5'>🔗</a></div><code class='itemdeclcode'><span class='keyword added'>constexpr</span> <span class='keyword'>explicit</span> <span class='keyword'>operator</span> <span class='keyword'>bool</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
</code></div></div><div class='para' id='container.node.observers-14'><div class='marginalizedparent'><a class='marginalized' href='#container.node.observers-14'>14</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L2488'>#</a></div><div class='texpara'><div id='container.node.observers-14.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>ptr_<span class='shy'></span> <span class='operator'>!</span><span class='operator'>=</span> <span class='literal'>nullptr</span></span><a class='hidden_link' href='#container.node.observers-14.sentence-1'>.</a></div></div></div></div><div class='texpara'><div class='itemdecl' id='container.node.observers-itemdecl:6'><div class='marginalizedparent'><a class='itemDeclLink' href='#container.node.observers-itemdecl:6'>🔗</a></div><code class='itemdeclcode'><span class='keyword added'>constexpr</span> <span class='keyword'>bool</span> empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
</code></div></div><div class='para' id='container.node.observers-15'><div class='marginalizedparent'><a class='marginalized' href='#container.node.observers-15'>15</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L2498'>#</a></div><div class='texpara'><div id='container.node.observers-15.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>ptr_<span class='shy'></span> <span class='operator'>=</span><span class='operator'>=</span> <span class='literal'>nullptr</span></span><a class='hidden_link' href='#container.node.observers-15.sentence-1'>.</a></div></div></div></div></div><div id='container.node.modifiers' class='section'><h4 ><a class='secnum' href='#container.node.modifiers' style='min-width:95pt'>24.2.5.5</a> Modifiers <a class='abbr_ref' href='container.node.modifiers'>[container.node.modifiers]</a></h4><div class='texpara'><div class='itemdecl' id='container.node.modifiers-itemdecl:1'><div class='marginalizedparent'><a class='itemDeclLink' href='#container.node.modifiers-itemdecl:1'>🔗</a></div><code class='itemdeclcode'><span class='keyword added'>constexpr</span> <span class='keyword'>void</span> swap<span class='parenthesis'>(</span><i >node-handle</i><span class='operator'>&amp;</span> nh<span class='parenthesis'>)</span>
  <span class='keyword'>noexcept</span><span class='parenthesis'>(</span>ator_traits<span class='operator'>::</span>propagate_on_container_swap<span class='operator'>::</span>value <span class='operator'>|</span><span class='operator'>|</span>
           ator_traits<span class='operator'>::</span>is_always_equal<span class='operator'>::</span>value<span class='parenthesis'>)</span>;
</code></div></div><div class='para' id='container.node.modifiers-1'><div class='marginalizedparent'><a class='marginalized' href='#container.node.modifiers-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L2512'>#</a></div><div class='texpara'><div id='container.node.modifiers-1.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'><span class='operator'>!</span>alloc_<span class='shy'></span></span>, or <span class='texttt'><span class='operator'>!</span>nh<span class='operator'>.</span>alloc_<span class='shy'></span></span>, or
<span class='texttt'>ator_<span class='shy'></span>traits<span class='operator'>&#x200b;::&#x200b;</span>propagate_<span class='shy'></span>on_<span class='shy'></span>container_<span class='shy'></span>swap<span class='operator'>&#x200b;::&#x200b;</span>value</span> is <span class='texttt'><span class='literal'>true</span></span>,
or <span class='texttt'>alloc_<span class='shy'></span> <span class='operator'>=</span><span class='operator'>=</span> nh<span class='operator'>.</span>alloc_<span class='shy'></span></span><a class='hidden_link' href='#container.node.modifiers-1.sentence-1'>.</a></div></div></div></div><div class='para' id='container.node.modifiers-2'><div class='marginalizedparent'><a class='marginalized' href='#container.node.modifiers-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L2518'>#</a></div><div class='texpara'><div id='container.node.modifiers-2.sentence-1' class='sentence'><i >Effects</i>: Calls <span class='texttt'>swap<span class='parenthesis'>(</span>ptr_<span class='shy'></span>, nh<span class='operator'>.</span>ptr_<span class='shy'></span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#container.node.modifiers-2.sentence-1'>.</a></div> <div id='container.node.modifiers-2.sentence-2' class='sentence'>If <span class='texttt'><span class='operator'>!</span>alloc_<span class='shy'></span></span>, or
<span class='texttt'><span class='operator'>!</span>nh<span class='operator'>.</span>alloc_<span class='shy'></span></span>, or <span class='texttt'>ator_<span class='shy'></span>traits<span class='operator'>&#x200b;::&#x200b;</span>propagate_<span class='shy'></span>on_<span class='shy'></span>container_<span class='shy'></span>swap<span class='operator'>&#x200b;::&#x200b;</span>value</span>
is <span class='texttt'><span class='literal'>true</span></span> calls <span class='texttt'>swap<span class='parenthesis'>(</span>alloc_<span class='shy'></span>, nh<span class='operator'>.</span>alloc_<span class='shy'></span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#container.node.modifiers-2.sentence-2'>.</a></div></div></div></div></div></div>


<div id='deque.syn' class='section'><h3 ><a class='secnum' href='#deque.syn' style='min-width:80pt'>24.3.3</a> Header <span class='texttt'>&lt;deque&gt;</span> synopsis <a class='abbr_ref' href='deque.syn'>[deque.syn]</a></h3><div class='texpara'><span id='header:<deque>'><div class='marginalizedparent'><a class='itemDeclLink' href='#header:%3cdeque%3e'>🔗</a></div><span class='codeblock'><span class='preprocessordirective'>#include</span> <span class='anglebracket'>&lt;</span>compare<span class='anglebracket'>&gt;</span>              <span class='comment'>// see <a href='compare.syn' title='17.11.1&emsp;Header &lt;compare&gt; synopsis'>[compare.<span class='shy'></span>syn]</a></span>
<span class='preprocessordirective'>#include</span> <span class='anglebracket'>&lt;</span>initializer_list<span class='anglebracket'>&gt;</span>     <span class='comment'>// see <a href='initializer.list.syn' title='17.10.2&emsp;Header &lt;initializer_&shy;list&gt; synopsis'>[initializer.<span class='shy'></span>list.<span class='shy'></span>syn]</a></span>

<span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='comment'>// <a href='#deque' title='24.3.9&emsp;Class template deque'>[deque]</a>, class template <span class='tcode_in_codeblock'>deque</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span> <span class='keyword'>class</span> deque;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    <span class='keyword added'>constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> deque<span class='anglebracket'>&lt;</span>T, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x, <span class='keyword'>const</span> deque<span class='anglebracket'>&lt;</span>T, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    <span class='keyword added'>constexpr</span> <i >synth-three-way-result</i><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='operator'>=</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='keyword'>const</span> deque<span class='anglebracket'>&lt;</span>T, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x,
                                          <span class='keyword'>const</span> deque<span class='anglebracket'>&lt;</span>T, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    <span class='keyword added'>constexpr</span> <span class='keyword'>void</span> swap<span class='parenthesis'>(</span>deque<span class='anglebracket'>&lt;</span>T, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x, deque<span class='anglebracket'>&lt;</span>T, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>
      <span class='keyword'>noexcept</span><span class='parenthesis'>(</span><span class='keyword'>noexcept</span><span class='parenthesis'>(</span>x<span class='operator'>.</span>swap<span class='parenthesis'>(</span>y<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;

  <span class='comment'>// <a href='#deque.erasure' title='24.3.9.5&emsp;Erasure'>[deque.<span class='shy'></span>erasure]</a>, erasure</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Allocator, <span class='keyword'>class</span> U <span class='operator'>=</span> T<span class='anglebracket'>&gt;</span>
    <span class='keyword added'>constexpr</span> <span class='keyword'>typename</span> deque<span class='anglebracket'>&lt;</span>T, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>size_type
      erase<span class='parenthesis'>(</span>deque<span class='anglebracket'>&lt;</span>T, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> c, <span class='keyword'>const</span> U<span class='operator'>&amp;</span> value<span class='parenthesis'>)</span>;
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Allocator, <span class='keyword'>class</span> Predicate<span class='anglebracket'>&gt;</span>
    <span class='keyword added'>constexpr</span> <span class='keyword'>typename</span> deque<span class='anglebracket'>&lt;</span>T, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>size_type
      erase_if<span class='parenthesis'>(</span>deque<span class='anglebracket'>&lt;</span>T, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> c, Predicate pred<span class='parenthesis'>)</span>;

  <span class='keyword'>namespace</span> pmr <span class='curlybracket'>{</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T<span class='anglebracket'>&gt;</span>
      <span class='keyword'>using</span> deque <span class='operator'>=</span> std<span class='operator'>::</span>deque<span class='anglebracket'>&lt;</span>T, polymorphic_allocator<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;
  <span class='curlybracket'>}</span>
<span class='curlybracket'>}</span>
</span></span></div></div><div id='forward.list.syn' class='section'><h3 ><a class='secnum' href='#forward.list.syn' style='min-width:80pt'>24.3.4</a> Header <span class='texttt'>&lt;forward_<span class='shy'></span>list&gt;</span> synopsis <a class='abbr_ref' href='forward.list.syn'>[forward.list.syn]</a></h3><div class='texpara'><span id='header:<forward_list>'><div class='marginalizedparent'><a class='itemDeclLink' href='#header:%3cforward_list%3e'>🔗</a></div><span class='codeblock'><span class='preprocessordirective'>#include</span> <span class='anglebracket'>&lt;</span>compare<span class='anglebracket'>&gt;</span>              <span class='comment'>// see <a href='compare.syn' title='17.11.1&emsp;Header &lt;compare&gt; synopsis'>[compare.<span class='shy'></span>syn]</a></span>
<span class='preprocessordirective'>#include</span> <span class='anglebracket'>&lt;</span>initializer_list<span class='anglebracket'>&gt;</span>     <span class='comment'>// see <a href='initializer.list.syn' title='17.10.2&emsp;Header &lt;initializer_&shy;list&gt; synopsis'>[initializer.<span class='shy'></span>list.<span class='shy'></span>syn]</a></span>

<span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='comment'>// <a href='#forward.list' title='24.3.10&emsp;Class template forward_&shy;list'>[forward.<span class='shy'></span>list]</a>, class template <span class='tcode_in_codeblock'>forward_<span class='shy'></span>list</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span> <span class='keyword'>class</span> forward_list;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    <span class='keyword added'>constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> forward_list<span class='anglebracket'>&lt;</span>T, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x, <span class='keyword'>const</span> forward_list<span class='anglebracket'>&lt;</span>T, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    <span class='keyword added'>constexpr</span> <i >synth-three-way-result</i><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='operator'>=</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='keyword'>const</span> forward_list<span class='anglebracket'>&lt;</span>T, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x,
                                          <span class='keyword'>const</span> forward_list<span class='anglebracket'>&lt;</span>T, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    <span class='keyword added'>constexpr</span> <span class='keyword'>void</span> swap<span class='parenthesis'>(</span>forward_list<span class='anglebracket'>&lt;</span>T, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x, forward_list<span class='anglebracket'>&lt;</span>T, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>
      <span class='keyword'>noexcept</span><span class='parenthesis'>(</span><span class='keyword'>noexcept</span><span class='parenthesis'>(</span>x<span class='operator'>.</span>swap<span class='parenthesis'>(</span>y<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;

  <span class='comment'>// <a href='#forward.list.erasure' title='24.3.10.7&emsp;Erasure'>[forward.<span class='shy'></span>list.<span class='shy'></span>erasure]</a>, erasure</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Allocator, <span class='keyword'>class</span> U <span class='operator'>=</span> T<span class='anglebracket'>&gt;</span>
    <span class='keyword added'>constexpr</span> <span class='keyword'>typename</span> forward_list<span class='anglebracket'>&lt;</span>T, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>size_type
      erase<span class='parenthesis'>(</span>forward_list<span class='anglebracket'>&lt;</span>T, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> c, <span class='keyword'>const</span> U<span class='operator'>&amp;</span> value<span class='parenthesis'>)</span>;
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Allocator, <span class='keyword'>class</span> Predicate<span class='anglebracket'>&gt;</span>
    <span class='keyword added'>constexpr</span> <span class='keyword'>typename</span> forward_list<span class='anglebracket'>&lt;</span>T, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>size_type
      erase_if<span class='parenthesis'>(</span>forward_list<span class='anglebracket'>&lt;</span>T, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> c, Predicate pred<span class='parenthesis'>)</span>;

  <span class='keyword'>namespace</span> pmr <span class='curlybracket'>{</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T<span class='anglebracket'>&gt;</span>
      <span class='keyword'>using</span> forward_list <span class='operator'>=</span> std<span class='operator'>::</span>forward_list<span class='anglebracket'>&lt;</span>T, polymorphic_allocator<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;
  <span class='curlybracket'>}</span>
<span class='curlybracket'>}</span>
</span></span></div></div><div id='list.syn' class='section'><h3 ><a class='secnum' href='#list.syn' style='min-width:80pt'>24.3.5</a> Header <span class='texttt'>&lt;list&gt;</span> synopsis <a class='abbr_ref' href='list.syn'>[list.syn]</a></h3><div class='texpara'><span id='header:<list>'><div class='marginalizedparent'><a class='itemDeclLink' href='#header:%3clist%3e'>🔗</a></div><span class='codeblock'><span class='preprocessordirective'>#include</span> <span class='anglebracket'>&lt;</span>compare<span class='anglebracket'>&gt;</span>              <span class='comment'>// see <a href='compare.syn' title='17.11.1&emsp;Header &lt;compare&gt; synopsis'>[compare.<span class='shy'></span>syn]</a></span>
<span class='preprocessordirective'>#include</span> <span class='anglebracket'>&lt;</span>initializer_list<span class='anglebracket'>&gt;</span>     <span class='comment'>// see <a href='initializer.list.syn' title='17.10.2&emsp;Header &lt;initializer_&shy;list&gt; synopsis'>[initializer.<span class='shy'></span>list.<span class='shy'></span>syn]</a></span>

<span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='comment'>// <a href='#list' title='24.3.11&emsp;Class template list'>[list]</a>, class template <span class='tcode_in_codeblock'>list</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span> <span class='keyword'>class</span> list;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    <span class='keyword added'>constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> list<span class='anglebracket'>&lt;</span>T, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x, <span class='keyword'>const</span> list<span class='anglebracket'>&lt;</span>T, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    <span class='keyword added'>constexpr</span> <i >synth-three-way-result</i><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='operator'>=</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='keyword'>const</span> list<span class='anglebracket'>&lt;</span>T, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x,
                                          <span class='keyword'>const</span> list<span class='anglebracket'>&lt;</span>T, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    <span class='keyword added'>constexpr</span> <span class='keyword'>void</span> swap<span class='parenthesis'>(</span>list<span class='anglebracket'>&lt;</span>T, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x, list<span class='anglebracket'>&lt;</span>T, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>
      <span class='keyword'>noexcept</span><span class='parenthesis'>(</span><span class='keyword'>noexcept</span><span class='parenthesis'>(</span>x<span class='operator'>.</span>swap<span class='parenthesis'>(</span>y<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;

  <span class='comment'>// <a href='#list.erasure' title='24.3.11.6&emsp;Erasure'>[list.<span class='shy'></span>erasure]</a>, erasure</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Allocator, <span class='keyword'>class</span> U <span class='operator'>=</span> T<span class='anglebracket'>&gt;</span>
    <span class='keyword added'>constexpr</span> <span class='keyword'>typename</span> list<span class='anglebracket'>&lt;</span>T, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>size_type
      erase<span class='parenthesis'>(</span>list<span class='anglebracket'>&lt;</span>T, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> c, <span class='keyword'>const</span> U<span class='operator'>&amp;</span> value<span class='parenthesis'>)</span>;
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Allocator, <span class='keyword'>class</span> Predicate<span class='anglebracket'>&gt;</span>
    <span class='keyword added'>constexpr</span> <span class='keyword'>typename</span> list<span class='anglebracket'>&lt;</span>T, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>size_type
      erase_if<span class='parenthesis'>(</span>list<span class='anglebracket'>&lt;</span>T, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> c, Predicate pred<span class='parenthesis'>)</span>;

  <span class='keyword'>namespace</span> pmr <span class='curlybracket'>{</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T<span class='anglebracket'>&gt;</span>
      <span class='keyword'>using</span> list <span class='operator'>=</span> std<span class='operator'>::</span>list<span class='anglebracket'>&lt;</span>T, polymorphic_allocator<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;
  <span class='curlybracket'>}</span>
<span class='curlybracket'>}</span>
</span></span></div></div>



<div id='deque' class='section'><h3 ><a class='secnum' href='#deque' style='min-width:80pt'>24.3.9</a> Class template <span class='texttt'>deque</span> <a class='abbr_ref' href='deque'>[deque]</a></h3><div id='deque.overview' class='section'><h4 ><a class='secnum' href='#deque.overview' style='min-width:95pt'>24.3.9.1</a> Overview <a class='abbr_ref' href='deque.overview'>[deque.overview]</a></h4><div class='para' id='deque.overview-1'><div class='marginalizedparent'><a class='marginalized' href='#deque.overview-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L6539'>#</a></div><div class='texpara'><div id='deque.overview-1.sentence-1' class='sentence'>A
<a class='index' id='lib:deque'></a><span class='texttt'>deque</span>
is a sequence container that supports <a href='random.access.iterators' title='25.3.5.7&emsp;Random access iterators&emsp;[random.access.iterators]'>random access iterators</a><a class='hidden_link' href='#deque.overview-1.sentence-1'>.</a></div> <div id='deque.overview-1.sentence-2' class='sentence'>In addition, it supports constant time insert and erase operations at the beginning or the end;
insert and erase in the middle take linear time<a class='hidden_link' href='#deque.overview-1.sentence-2'>.</a></div> <div id='deque.overview-1.sentence-3' class='sentence'>That is, a deque is especially optimized for pushing and popping elements at the beginning and end<a class='hidden_link' href='#deque.overview-1.sentence-3'>.</a></div> <div id='deque.overview-1.sentence-4' class='sentence'>Storage management is handled automatically<a class='hidden_link' href='#deque.overview-1.sentence-4'>.</a></div></div></div><div class='para' id='deque.overview-2'><div class='marginalizedparent'><a class='marginalized' href='#deque.overview-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L6549'>#</a></div><div class='texpara'><div id='deque.overview-2.sentence-1' class='sentence'>A <span class='texttt'>deque</span> meets all of the requirements
of a container (<a href='#container.reqmts' title='24.2.2.2&emsp;Container requirements'>[container.<span class='shy'></span>reqmts]</a>),
of a reversible container (<a href='#container.rev.reqmts' title='24.2.2.3&emsp;Reversible container requirements'>[container.<span class='shy'></span>rev.<span class='shy'></span>reqmts]</a>),
of an allocator-aware container (<a href='#container.alloc.reqmts' title='24.2.2.5&emsp;Allocator-aware containers'>[container.<span class='shy'></span>alloc.<span class='shy'></span>reqmts]</a>), and
of a sequence container,
including the optional sequence container requirements (<a href='#sequence.reqmts' title='24.2.4&emsp;Sequence containers'>[sequence.<span class='shy'></span>reqmts]</a>)<a class='hidden_link' href='#deque.overview-2.sentence-1'>.</a></div> <div id='deque.overview-2.sentence-2' class='sentence'>Descriptions are provided here only for operations on
<span class='texttt'>deque</span>
that are not described in one of these tables
or for operations where there is additional semantic information<a class='hidden_link' href='#deque.overview-2.sentence-2'>.</a></div>

<div class='para added' id='deque.overview-3'><div class='marginalizedparent'><a class='marginalized' href='#deque.overview-3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href=''>#</a></div>
<div class='texpara'>The types <span class="texttt">iterator</span> and <span class="texttt">const_iterator</span> meet the constexpr iterator requirements (<a href="iterator.requirements.general" title="25.3.1 General">[iterator.<span class="shy"></span>requirements.<span class="shy"></span>general]</a>).</div></div>

<div class='texpara'><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> deque <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> value_type             <span class='operator'>=</span> T;
    <span class='keyword'>using</span> allocator_type         <span class='operator'>=</span> Allocator;
    <span class='keyword'>using</span> pointer                <span class='operator'>=</span> <span class='keyword'>typename</span> allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>pointer;
    <span class='keyword'>using</span> const_pointer          <span class='operator'>=</span> <span class='keyword'>typename</span> allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>const_pointer;
    <span class='keyword'>using</span> reference              <span class='operator'>=</span> value_type<span class='operator'>&amp;</span>;
    <span class='keyword'>using</span> const_reference        <span class='operator'>=</span> <span class='keyword'>const</span> value_type<span class='operator'>&amp;</span>;
    <span class='keyword'>using</span> size_type              <span class='operator'>=</span> <a class='index' id=':type_of_deque::size_type'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> difference_type        <span class='operator'>=</span> <a class='index' id=':type_of_deque::difference_type'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> iterator               <span class='operator'>=</span> <a class='index' id=':type_of_deque::iterator'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> const_iterator         <span class='operator'>=</span> <a class='index' id=':type_of_deque::const_iterator'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> reverse_iterator       <span class='operator'>=</span> std<span class='operator'>::</span>reverse_iterator<span class='anglebracket'>&lt;</span>iterator<span class='anglebracket'>&gt;</span>;
    <span class='keyword'>using</span> const_reverse_iterator <span class='operator'>=</span> std<span class='operator'>::</span>reverse_iterator<span class='anglebracket'>&lt;</span>const_iterator<span class='anglebracket'>&gt;</span>;

    <span class='comment'>// <a href='#deque.cons' title='24.3.9.2&emsp;Constructors, copy, and assignment'>[deque.<span class='shy'></span>cons]</a>, construct/copy/destroy</span>
    <span class="added keyword">constexpr</span> deque<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>:</span> deque<span class='parenthesis'>(</span>Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class="added keyword">constexpr</span> <span class='keyword'>explicit</span> deque<span class='parenthesis'>(</span><span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> <span class='keyword'>explicit</span> deque<span class='parenthesis'>(</span>size_type n, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> deque<span class='parenthesis'>(</span>size_type n, <span class='keyword'>const</span> T<span class='operator'>&amp;</span> value, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="added keyword">constexpr</span> deque<span class='parenthesis'>(</span>InputIterator first, InputIterator last, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range___'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="added keyword">constexpr</span> deque<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> deque<span class='parenthesis'>(</span><span class='keyword'>const</span> deque<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> deque<span class='parenthesis'>(</span>deque<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> deque<span class='parenthesis'>(</span><span class='keyword'>const</span> deque<span class='operator'>&amp;</span>, <span class='keyword'>const</span> type_identity_t<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> deque<span class='parenthesis'>(</span>deque<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, <span class='keyword'>const</span> type_identity_t<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> deque<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;

    <span class="added keyword">constexpr</span> <span class='operator'>~</span>deque<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> deque<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> deque<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> deque<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span>deque<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>
      <span class='keyword'>noexcept</span><span class='parenthesis'>(</span>allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>is_always_equal<span class='operator'>::</span>value<span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> deque<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="added keyword">constexpr</span> <span class='keyword'>void</span> assign<span class='parenthesis'>(</span>InputIterator first, InputIterator last<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range____'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="added keyword">constexpr</span> <span class='keyword'>void</span> assign_range<span class='parenthesis'>(</span>R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> <span class='keyword'>void</span> assign<span class='parenthesis'>(</span>size_type n, <span class='keyword'>const</span> T<span class='operator'>&amp;</span> t<span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> <span class='keyword'>void</span> assign<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> allocator_type get_allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// iterators</span>
    <span class="added keyword">constexpr</span> iterator               begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="added keyword">constexpr</span> const_iterator         begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="added keyword">constexpr</span> iterator               end<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="added keyword">constexpr</span> const_iterator         end<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="added keyword">constexpr</span> reverse_iterator       rbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="added keyword">constexpr</span> const_reverse_iterator rbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="added keyword">constexpr</span> reverse_iterator       rend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="added keyword">constexpr</span> const_reverse_iterator rend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class="added keyword">constexpr</span> const_iterator         cbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="added keyword">constexpr</span> const_iterator         cend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="added keyword">constexpr</span> const_reverse_iterator crbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="added keyword">constexpr</span> const_reverse_iterator crend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// <a href='#deque.capacity' title='24.3.9.3&emsp;Capacity'>[deque.<span class='shy'></span>capacity]</a>, capacity</span>
    <span class="added keyword">constexpr</span> <span class='keyword'>bool</span> empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="added keyword">constexpr</span> size_type size<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="added keyword">constexpr</span> size_type max_size<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="added keyword">constexpr</span> <span class='keyword'>void</span>      resize<span class='parenthesis'>(</span>size_type sz<span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> <span class='keyword'>void</span>      resize<span class='parenthesis'>(</span>size_type sz, <span class='keyword'>const</span> T<span class='operator'>&amp;</span> c<span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> <span class='keyword'>void</span>      shrink_to_fit<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;

    <span class='comment'>// element access</span>
    <span class="added keyword">constexpr</span> reference       <span class='keyword'>operator</span><span class='squarebracket'>[</span><span class='squarebracket'>]</span><span class='parenthesis'>(</span>size_type n<span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> const_reference <span class='keyword'>operator</span><span class='squarebracket'>[</span><span class='squarebracket'>]</span><span class='parenthesis'>(</span>size_type n<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added keyword">constexpr</span> reference       at<span class='parenthesis'>(</span>size_type n<span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> const_reference at<span class='parenthesis'>(</span>size_type n<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added keyword">constexpr</span> reference       front<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> const_reference front<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added keyword">constexpr</span> reference       back<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> const_reference back<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// <a href='#deque.modifiers' title='24.3.9.4&emsp;Modifiers'>[deque.<span class='shy'></span>modifiers]</a>, modifiers</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span> <span class="added keyword">constexpr</span> reference emplace_front<span class='parenthesis'>(</span>Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span> <span class="added keyword">constexpr</span> reference emplace_back<span class='parenthesis'>(</span>Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span> <span class="added keyword">constexpr</span> iterator emplace<span class='parenthesis'>(</span>const_iterator position, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;

    <span class="added keyword">constexpr</span> <span class='keyword'>void</span> push_front<span class='parenthesis'>(</span><span class='keyword'>const</span> T<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> <span class='keyword'>void</span> push_front<span class='parenthesis'>(</span>T<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range_____'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="added keyword">constexpr</span> <span class='keyword'>void</span> prepend_range<span class='parenthesis'>(</span>R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> <span class='keyword'>void</span> push_back<span class='parenthesis'>(</span><span class='keyword'>const</span> T<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> <span class='keyword'>void</span> push_back<span class='parenthesis'>(</span>T<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range______'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="added keyword">constexpr</span> <span class='keyword'>void</span> append_range<span class='parenthesis'>(</span>R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;

    <span class="added keyword">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, <span class='keyword'>const</span> T<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, T<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, size_type n, <span class='keyword'>const</span> T<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="added keyword">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, InputIterator first, InputIterator last<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range_______'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="added keyword">constexpr</span> iterator insert_range<span class='parenthesis'>(</span>const_iterator position, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, initializer_list<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;

    <span class="added keyword">constexpr</span> <span class='keyword'>void</span> pop_front<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> <span class='keyword'>void</span> pop_back<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;

    <span class="added keyword">constexpr</span> iterator erase<span class='parenthesis'>(</span>const_iterator position<span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> iterator erase<span class='parenthesis'>(</span>const_iterator first, const_iterator last<span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> <span class='keyword'>void</span>     swap<span class='parenthesis'>(</span>deque<span class='operator'>&amp;</span><span class='parenthesis'>)</span>
      <span class='keyword'>noexcept</span><span class='parenthesis'>(</span>allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>is_always_equal<span class='operator'>::</span>value<span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> <span class='keyword'>void</span>     clear<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
  <span class='curlybracket'>}</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    deque<span class='parenthesis'>(</span>InputIterator, InputIterator, Allocator <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> deque<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range_'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R, <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    deque<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, Allocator <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> deque<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>}</span>
</span></div></div></div><div id='deque.cons' class='section'><h4 ><a class='secnum' href='#deque.cons' style='min-width:95pt'>24.3.9.2</a> Constructors, copy, and assignment <a class='abbr_ref' href='deque.cons'>[deque.cons]</a></h4><div class='texpara'><div id='lib:deque,constructor'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:deque,constructor'>🔗</a></div><code class='itemdeclcode'> <span class="added keyword">constexpr</span> <span class='keyword'>explicit</span> deque<span class='parenthesis'>(</span><span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='deque.cons-1'><div class='marginalizedparent'><a class='marginalized' href='#deque.cons-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L6692'>#</a></div><div class='texpara'><div id='deque.cons-1.sentence-1' class='sentence'><i >Effects</i>: Constructs an empty
<span class='texttt'>deque</span>,
using the specified allocator<a class='hidden_link' href='#deque.cons-1.sentence-1'>.</a></div></div></div></div><div class='para' id='deque.cons-2'><div class='marginalizedparent'><a class='marginalized' href='#deque.cons-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L6698'>#</a></div><div class='texpara'><div id='deque.cons-2.sentence-1' class='sentence'><i >Complexity</i>: Constant<a class='hidden_link' href='#deque.cons-2.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:deque,constructor_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:deque,constructor_'>🔗</a></div><code class='itemdeclcode'> <span class="added keyword">constexpr</span> <span class='keyword'>explicit</span> deque<span class='parenthesis'>(</span>size_type n, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='deque.cons-3'><div class='marginalizedparent'><a class='marginalized' href='#deque.cons-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L6709'>#</a></div><div class='texpara'><div id='deque.cons-3.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>T</span> is <i >Cpp17DefaultInsertable</i> into <span class='texttt'>deque</span><a class='hidden_link' href='#deque.cons-3.sentence-1'>.</a></div></div></div></div><div class='para' id='deque.cons-4'><div class='marginalizedparent'><a class='marginalized' href='#deque.cons-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L6713'>#</a></div><div class='texpara'><div id='deque.cons-4.sentence-1' class='sentence'><i >Effects</i>: Constructs a <span class='texttt'>deque</span> with
<span class='texttt'>n</span> default-inserted elements using the specified allocator<a class='hidden_link' href='#deque.cons-4.sentence-1'>.</a></div></div></div></div><div class='para' id='deque.cons-5'><div class='marginalizedparent'><a class='marginalized' href='#deque.cons-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L6718'>#</a></div><div class='texpara'><div id='deque.cons-5.sentence-1' class='sentence'><i >Complexity</i>: Linear in <span class='texttt'>n</span><a class='hidden_link' href='#deque.cons-5.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:deque,constructor__'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:deque,constructor__'>🔗</a></div><code class='itemdeclcode'> <span class="added keyword">constexpr</span> deque<span class='parenthesis'>(</span>size_type n, <span class='keyword'>const</span> T<span class='operator'>&amp;</span> value, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='deque.cons-6'><div class='marginalizedparent'><a class='marginalized' href='#deque.cons-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L6729'>#</a></div><div class='texpara'><div id='deque.cons-6.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>T</span> is <i >Cpp17CopyInsertable</i> into <span class='texttt'>deque</span><a class='hidden_link' href='#deque.cons-6.sentence-1'>.</a></div></div></div></div><div class='para' id='deque.cons-7'><div class='marginalizedparent'><a class='marginalized' href='#deque.cons-7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L6733'>#</a></div><div class='texpara'><div id='deque.cons-7.sentence-1' class='sentence'><i >Effects</i>: Constructs a
<span class='texttt'>deque</span>
with <span class='texttt'>n</span> copies of <span class='texttt'>value</span>,
using the specified allocator<a class='hidden_link' href='#deque.cons-7.sentence-1'>.</a></div></div></div></div><div class='para' id='deque.cons-8'><div class='marginalizedparent'><a class='marginalized' href='#deque.cons-8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L6740'>#</a></div><div class='texpara'><div id='deque.cons-8.sentence-1' class='sentence'><i >Complexity</i>: Linear in <span class='texttt'>n</span><a class='hidden_link' href='#deque.cons-8.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:deque,constructor___'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:deque,constructor___'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
   <span class="added keyword">constexpr</span> deque<span class='parenthesis'>(</span>InputIterator first, InputIterator last, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='deque.cons-9'><div class='marginalizedparent'><a class='marginalized' href='#deque.cons-9'>9</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L6752'>#</a></div><div class='texpara'><div id='deque.cons-9.sentence-1' class='sentence'><i >Effects</i>: Constructs a
<span class='texttt'>deque</span>
equal to the range
[<span class='texttt'>first, last</span>),
using the specified allocator<a class='hidden_link' href='#deque.cons-9.sentence-1'>.</a></div></div></div></div><div class='para' id='deque.cons-10'><div class='marginalizedparent'><a class='marginalized' href='#deque.cons-10'>10</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L6760'>#</a></div><div class='texpara'><div id='deque.cons-10.sentence-1' class='sentence'><i >Complexity</i>: Linear in <span class='texttt'>distance<span class='parenthesis'>(</span>first, last<span class='parenthesis'>)</span></span><a class='hidden_link' href='#deque.cons-10.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:deque,constructor____'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:deque,constructor____'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range________'><span class='texttt'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
   <span class="added keyword">constexpr</span> deque<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='deque.cons-11'><div class='marginalizedparent'><a class='marginalized' href='#deque.cons-11'>11</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L6772'>#</a></div><div class='texpara'><div id='deque.cons-11.sentence-1' class='sentence'><i >Effects</i>: Constructs a <span class='texttt'>deque</span> with the elements of the range <span class='texttt'>rg</span>,
using the specified allocator<a class='hidden_link' href='#deque.cons-11.sentence-1'>.</a></div></div></div></div><div class='para' id='deque.cons-12'><div class='marginalizedparent'><a class='marginalized' href='#deque.cons-12'>12</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L6777'>#</a></div><div class='texpara'><div id='deque.cons-12.sentence-1' class='sentence'><i >Complexity</i>: Linear in <span class='texttt'>ranges<span class='operator'>&#x200b;::&#x200b;</span>distance<span class='parenthesis'>(</span>rg<span class='parenthesis'>)</span></span><a class='hidden_link' href='#deque.cons-12.sentence-1'>.</a></div></div></div></div></div><div id='deque.capacity' class='section'><h4 ><a class='secnum' href='#deque.capacity' style='min-width:95pt'>24.3.9.3</a> Capacity <a class='abbr_ref' href='deque.capacity'>[deque.capacity]</a></h4><div class='texpara'><div id='lib:deque,resize'><div id='lib:resize,deque'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:resize,deque'>🔗</a></div><code class='itemdeclcode'><span class="added keyword">constexpr</span> <span class='keyword'>void</span> resize<span class='parenthesis'>(</span>size_type sz<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='deque.capacity-1'><div class='marginalizedparent'><a class='marginalized' href='#deque.capacity-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L6790'>#</a></div><div class='texpara'><div id='deque.capacity-1.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>T</span> is <i >Cpp17MoveInsertable</i> and <i >Cpp17DefaultInsertable</i> into <span class='texttt'>deque</span><a class='hidden_link' href='#deque.capacity-1.sentence-1'>.</a></div></div></div></div><div class='para' id='deque.capacity-2'><div class='marginalizedparent'><a class='marginalized' href='#deque.capacity-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L6794'>#</a></div><div class='texpara'><div id='deque.capacity-2.sentence-1' class='sentence'><i >Effects</i>: If <span class='texttt'>sz <span class='anglebracket'>&lt;</span> size<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>, erases the last <span class='texttt'>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>-</span> sz</span> elements
from the sequence<a class='hidden_link' href='#deque.capacity-2.sentence-1'>.</a></div> <div id='deque.capacity-2.sentence-2' class='sentence'>Otherwise,
appends <span class='texttt'>sz <span class='operator'>-</span> size<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> default-inserted elements to the sequence<a class='hidden_link' href='#deque.capacity-2.sentence-2'>.</a></div></div></div></div><div class='texpara'><div id='lib:deque,resize_'><div id='lib:resize,deque_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:resize,deque_'>🔗</a></div><code class='itemdeclcode'><span class="added keyword">constexpr</span> <span class='keyword'>void</span> resize<span class='parenthesis'>(</span>size_type sz, <span class='keyword'>const</span> T<span class='operator'>&amp;</span> c<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='deque.capacity-3'><div class='marginalizedparent'><a class='marginalized' href='#deque.capacity-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L6807'>#</a></div><div class='texpara'><div id='deque.capacity-3.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>T</span> is <i >Cpp17CopyInsertable</i> into <span class='texttt'>deque</span><a class='hidden_link' href='#deque.capacity-3.sentence-1'>.</a></div></div></div></div><div class='para' id='deque.capacity-4'><div class='marginalizedparent'><a class='marginalized' href='#deque.capacity-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L6811'>#</a></div><div class='texpara'><div id='deque.capacity-4.sentence-1' class='sentence'><i >Effects</i>: If <span class='texttt'>sz <span class='anglebracket'>&lt;</span> size<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>, erases the last <span class='texttt'>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>-</span> sz</span> elements
from the sequence<a class='hidden_link' href='#deque.capacity-4.sentence-1'>.</a></div> <div id='deque.capacity-4.sentence-2' class='sentence'>Otherwise,
appends <span class='texttt'>sz <span class='operator'>-</span> size<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> copies of <span class='texttt'>c</span> to the sequence<a class='hidden_link' href='#deque.capacity-4.sentence-2'>.</a></div></div></div></div><div class='texpara'><div id='lib:deque,shrink_to_fit'><div id='lib:shrink_to_fit,deque'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:shrink_to_fit,deque'>🔗</a></div><code class='itemdeclcode'><span class="added keyword">constexpr</span> <span class='keyword'>void</span> shrink_to_fit<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='deque.capacity-5'><div class='marginalizedparent'><a class='marginalized' href='#deque.capacity-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L6824'>#</a></div><div class='texpara'><div id='deque.capacity-5.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>T</span> is <i >Cpp17MoveInsertable</i> into <span class='texttt'>deque</span><a class='hidden_link' href='#deque.capacity-5.sentence-1'>.</a></div></div></div></div><div class='para' id='deque.capacity-6'><div class='marginalizedparent'><a class='marginalized' href='#deque.capacity-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L6828'>#</a></div><div class='texpara'><div id='deque.capacity-6.sentence-1' class='sentence'><i >Effects</i>: <span class='texttt'>shrink_<span class='shy'></span>to_<span class='shy'></span>fit</span> is a non-binding request to reduce memory use
but does not change the size of the sequence<a class='hidden_link' href='#deque.capacity-6.sentence-1'>.</a></div> <div id='deque.capacity-note-1' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#deque.capacity-note-1'>1</a></i>:&ensp;<div id='deque.capacity-6.sentence-2' class='sentence'>The request is non-binding to allow latitude for
implementation-specific optimizations<a class='hidden_link' href='#deque.capacity-6.sentence-2'>.</a></div> —&nbsp;<i>end note</i>]</div></div> <div id='deque.capacity-6.sentence-3' class='sentence'>
If the size is equal to the old capacity, or
if an exception is thrown other than by the move constructor
of a non-<i >Cpp17CopyInsertable</i> <span class='texttt'>T</span>,
then there are no effects<a class='hidden_link' href='#deque.capacity-6.sentence-3'>.</a></div></div></div></div><div class='para' id='deque.capacity-7'><div class='marginalizedparent'><a class='marginalized' href='#deque.capacity-7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L6841'>#</a></div><div class='texpara'><div id='deque.capacity-7.sentence-1' class='sentence'><i >Complexity</i>: If the size is not equal to the old capacity,
linear in the size of the sequence;
otherwise constant<a class='hidden_link' href='#deque.capacity-7.sentence-1'>.</a></div></div></div></div><div class='para' id='deque.capacity-8'><div class='marginalizedparent'><a class='marginalized' href='#deque.capacity-8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L6847'>#</a></div><div class='texpara'><div id='deque.capacity-8.sentence-1' class='sentence'><i >Remarks</i>: If the size is not equal to the old capacity,
then invalidates all the references, pointers, and iterators
referring to the elements in the sequence,
as well as the past-the-end iterator<a class='hidden_link' href='#deque.capacity-8.sentence-1'>.</a></div></div></div></div></div><div id='deque.modifiers' class='section'><h4 ><a class='secnum' href='#deque.modifiers' style='min-width:95pt'>24.3.9.4</a> Modifiers <a class='abbr_ref' href='deque.modifiers'>[deque.modifiers]</a></h4><div class='texpara'><div id='lib:deque,emplace_'><div id='lib:emplace,deque'><div id='lib:deque,push_back'><div id='lib:push_back,deque'><div id='lib:deque,push_front'><div id='lib:push_front,deque'><div id='lib:deque,insert_'><div id='lib:insert,deque'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:insert,deque'>🔗</a></div><code class='itemdeclcode'><span class="added keyword">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, <span class='keyword'>const</span> T<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
<span class="added keyword">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, T<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
<span class="added keyword">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, size_type n, <span class='keyword'>const</span> T<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
  <span class="added keyword">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position,
                  InputIterator first, InputIterator last<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range_________'><span class='texttt'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
  <span class="added keyword">constexpr</span> iterator insert_range<span class='parenthesis'>(</span>const_iterator position, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;
<span class="added keyword">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, initializer_list<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;

<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span> <span class="added keyword">constexpr</span> reference emplace_front<span class='parenthesis'>(</span>Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span> <span class="added keyword">constexpr</span> reference emplace_back<span class='parenthesis'>(</span>Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span> <span class="added keyword">constexpr</span> iterator emplace<span class='parenthesis'>(</span>const_iterator position, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
<span class="added keyword">constexpr</span> <span class='keyword'>void</span> push_front<span class='parenthesis'>(</span><span class='keyword'>const</span> T<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
<span class="added keyword">constexpr</span> <span class='keyword'>void</span> push_front<span class='parenthesis'>(</span>T<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range__________'><span class='texttt'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
  <span class="added keyword">constexpr</span> <span class='keyword'>void</span> prepend_range<span class='parenthesis'>(</span>R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;
<span class="added keyword">constexpr</span> <span class='keyword'>void</span> push_back<span class='parenthesis'>(</span><span class='keyword'>const</span> T<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
<span class="added keyword">constexpr</span> <span class='keyword'>void</span> push_back<span class='parenthesis'>(</span>T<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range___________'><span class='texttt'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
  <span class="added keyword">constexpr</span> <span class='keyword'>void</span> append_range<span class='parenthesis'>(</span>R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;
</code></div></div></div></div></div></div></div></div></div></div><div class='para' id='deque.modifiers-1'><div class='marginalizedparent'><a class='marginalized' href='#deque.modifiers-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L6886'>#</a></div><div class='texpara'><div id='deque.modifiers-1.sentence-1' class='sentence'><i >Effects</i>: An insertion in the middle of the deque invalidates all the iterators and
references to elements of the deque<a class='hidden_link' href='#deque.modifiers-1.sentence-1'>.</a></div> <div id='deque.modifiers-1.sentence-2' class='sentence'>An insertion at either end of the
deque invalidates all the iterators to the deque, but has no effect on
the validity of references to elements of the deque<a class='hidden_link' href='#deque.modifiers-1.sentence-2'>.</a></div></div></div></div><div class='para' id='deque.modifiers-2'><div class='marginalizedparent'><a class='marginalized' href='#deque.modifiers-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L6894'>#</a></div><div class='texpara'><div id='deque.modifiers-2.sentence-1' class='sentence'><i >Complexity</i>: The complexity is linear in the number of elements inserted plus the lesser
of the distances to the beginning and end of the deque<a class='hidden_link' href='#deque.modifiers-2.sentence-1'>.</a></div> <div id='deque.modifiers-2.sentence-2' class='sentence'>Inserting a single element at either the beginning or end of a deque always takes constant time
and causes a single call to a constructor of
<span class='texttt'>T</span><a class='hidden_link' href='#deque.modifiers-2.sentence-2'>.</a></div></div></div></div><div class='para' id='deque.modifiers-3'><div class='marginalizedparent'><a class='marginalized' href='#deque.modifiers-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L6902'>#</a></div><div class='texpara'><div id='deque.modifiers-3.sentence-1' class='sentence'><i >Remarks</i>: If an exception is thrown other than by the
copy constructor, move constructor,
assignment operator, or move assignment operator of
<span class='texttt'>T</span>
there are no effects<a class='hidden_link' href='#deque.modifiers-3.sentence-1'>.</a></div> <div id='deque.modifiers-3.sentence-2' class='sentence'>If an exception is thrown while inserting a single element at either end,
there are no effects<a class='hidden_link' href='#deque.modifiers-3.sentence-2'>.</a></div> <div id='deque.modifiers-3.sentence-3' class='sentence'>Otherwise, if an exception is thrown by the move constructor of a
non-<i >Cpp17CopyInsertable</i>
<span class='texttt'>T</span>, the effects are unspecified<a class='hidden_link' href='#deque.modifiers-3.sentence-3'>.</a></div></div></div></div><div class='texpara'><div id='lib:deque,erase_'><div id='lib:erase,deque'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:erase,deque'>🔗</a></div><code class='itemdeclcode'><span class="added keyword">constexpr</span> iterator erase<span class='parenthesis'>(</span>const_iterator position<span class='parenthesis'>)</span>;
<span class="added keyword">constexpr</span> iterator erase<span class='parenthesis'>(</span>const_iterator first, const_iterator last<span class='parenthesis'>)</span>;
<span class="added keyword">constexpr</span> <span class='keyword'>void</span> pop_front<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
<span class="added keyword">constexpr</span> <span class='keyword'>void</span> pop_back<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='deque.modifiers-4'><div class='marginalizedparent'><a class='marginalized' href='#deque.modifiers-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L6925'>#</a></div><div class='texpara'><div id='deque.modifiers-4.sentence-1' class='sentence'><i >Effects</i>: An erase operation that erases the last element of a deque invalidates only the past-the-end iterator
and all iterators and references to the erased elements<a class='hidden_link' href='#deque.modifiers-4.sentence-1'>.</a></div> <div id='deque.modifiers-4.sentence-2' class='sentence'>An erase operation that erases the first
element of a deque but not the last element invalidates only iterators
and references to the erased elements<a class='hidden_link' href='#deque.modifiers-4.sentence-2'>.</a></div> <div id='deque.modifiers-4.sentence-3' class='sentence'>An erase operation
that erases neither the first element nor the last element of a deque invalidates the past-the-end
iterator and all iterators and references to all the elements of the deque<a class='hidden_link' href='#deque.modifiers-4.sentence-3'>.</a></div> <div id='deque.modifiers-note-1' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#deque.modifiers-note-1'>1</a></i>:&ensp;<div id='deque.modifiers-4.sentence-4' class='sentence'><span class='texttt'>pop_<span class='shy'></span>front</span> and <span class='texttt'>pop_<span class='shy'></span>back</span> are erase operations<a class='hidden_link' href='#deque.modifiers-4.sentence-4'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div></div></div><div class='para' id='deque.modifiers-5'><div class='marginalizedparent'><a class='marginalized' href='#deque.modifiers-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L6937'>#</a></div><div class='texpara'><div id='deque.modifiers-5.sentence-1' class='sentence'><i >Throws</i>: Nothing unless an exception is thrown by the assignment operator of
<span class='texttt'>T</span><a class='hidden_link' href='#deque.modifiers-5.sentence-1'>.</a></div></div></div></div><div class='para' id='deque.modifiers-6'><div class='marginalizedparent'><a class='marginalized' href='#deque.modifiers-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L6942'>#</a></div><div class='texpara'><div id='deque.modifiers-6.sentence-1' class='sentence'><i >Complexity</i>: The number of calls to the destructor of <span class='texttt'>T</span> is the same as the
number of elements erased, but the number of calls to the assignment operator of <span class='texttt'>T</span> is
no more than the lesser of the number of elements before the erased elements and the number of elements after the erased elements<a class='hidden_link' href='#deque.modifiers-6.sentence-1'>.</a></div></div></div></div></div><div id='deque.erasure' class='section'><h4 ><a class='secnum' href='#deque.erasure' style='min-width:95pt'>24.3.9.5</a> Erasure <a class='abbr_ref' href='deque.erasure'>[deque.erasure]</a></h4><div class='texpara'><div id='lib:deque,erase__'><div id='lib:erase,deque_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:erase,deque_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Allocator, <span class='keyword'>class</span> U <span class='operator'>=</span> T<span class='anglebracket'>&gt;</span>
  <span class='keyword added'>constexpr</span> <span class='keyword'>typename</span> deque<span class='anglebracket'>&lt;</span>T, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>size_type
    erase<span class='parenthesis'>(</span>deque<span class='anglebracket'>&lt;</span>T, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> c, <span class='keyword'>const</span> U<span class='operator'>&amp;</span> value<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='deque.erasure-1'><div class='marginalizedparent'><a class='marginalized' href='#deque.erasure-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L6959'>#</a></div><div class='texpara'><div id='deque.erasure-1.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>auto</span> it <span class='operator'>=</span> remove<span class='parenthesis'>(</span>c<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, c<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, value<span class='parenthesis'>)</span>;
<span class='keyword'>auto</span> r <span class='operator'>=</span> distance<span class='parenthesis'>(</span>it, c<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
c<span class='operator'>.</span>erase<span class='parenthesis'>(</span>it, c<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
<span class='keyword'>return</span> r;
</span></div></div></div></div><div class='texpara'><div id='lib:deque,erase_if'><div id='lib:erase_if,deque'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:erase_if,deque'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Allocator, <span class='keyword'>class</span> Predicate<span class='anglebracket'>&gt;</span>
  <span class='keyword added'>constexpr</span> <span class='keyword'>typename</span> deque<span class='anglebracket'>&lt;</span>T, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>size_type
    erase_if<span class='parenthesis'>(</span>deque<span class='anglebracket'>&lt;</span>T, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> c, Predicate pred<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='deque.erasure-2'><div class='marginalizedparent'><a class='marginalized' href='#deque.erasure-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L6978'>#</a></div><div class='texpara'><div id='deque.erasure-2.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>auto</span> it <span class='operator'>=</span> remove_if<span class='parenthesis'>(</span>c<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, c<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, pred<span class='parenthesis'>)</span>;
<span class='keyword'>auto</span> r <span class='operator'>=</span> distance<span class='parenthesis'>(</span>it, c<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
c<span class='operator'>.</span>erase<span class='parenthesis'>(</span>it, c<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
<span class='keyword'>return</span> r;
</span></div></div></div></div></div></div><div id='forward.list' class='section'><h3 ><a class='secnum' href='#forward.list' style='min-width:80pt'>24.3.10</a> Class template <span class='texttt'>forward_<span class='shy'></span>list</span> <a class='abbr_ref' href='forward.list'>[forward.list]</a></h3><div id='forward.list.overview' class='section'><h4 ><a class='secnum' href='#forward.list.overview' style='min-width:95pt'>24.3.10.1</a> Overview <a class='abbr_ref' href='forward.list.overview'>[forward.list.overview]</a></h4><div class='para' id='forward.list.overview-1'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.overview-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L6993'>#</a></div><div class='texpara'><div id='forward.list.overview-1.sentence-1' class='sentence'>A <span class='texttt'>forward_<span class='shy'></span>list</span> is a container that supports forward iterators and allows
constant time insert and erase operations anywhere within the sequence, with storage
management handled automatically<a class='hidden_link' href='#forward.list.overview-1.sentence-1'>.</a></div> <div id='forward.list.overview-1.sentence-2' class='sentence'>Fast random access to list elements is not supported<a class='hidden_link' href='#forward.list.overview-1.sentence-2'>.</a></div> <div id='forward.list.overview-note-1' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#forward.list.overview-note-1'>1</a></i>:&ensp;<div id='forward.list.overview-1.sentence-3' class='sentence'>It is intended that <span class='texttt'>forward_<span class='shy'></span>list</span> have zero space or time overhead
relative to a hand-written C-style singly linked list<a class='hidden_link' href='#forward.list.overview-1.sentence-3'>.</a></div> <div id='forward.list.overview-1.sentence-4' class='sentence'>Features that would conflict with
that goal have been omitted<a class='hidden_link' href='#forward.list.overview-1.sentence-4'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div></div><div class='para' id='forward.list.overview-2'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.overview-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7003'>#</a></div><div class='texpara'><div id='forward.list.overview-2.sentence-1' class='sentence'>A <span class='texttt'>forward_<span class='shy'></span>list</span> meets all of the requirements
of a container (<a href='#container.reqmts' title='24.2.2.2&emsp;Container requirements'>[container.<span class='shy'></span>reqmts]</a>),
except that the <span class='texttt'>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> member function is not provided and
<span class='texttt'><span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span></span> has linear complexity,
A <span class='texttt'>forward_<span class='shy'></span>list</span> also meets all of the requirements
for an allocator-aware container (<a href='#container.alloc.reqmts' title='24.2.2.5&emsp;Allocator-aware containers'>[container.<span class='shy'></span>alloc.<span class='shy'></span>reqmts]</a>)<a class='hidden_link' href='#forward.list.overview-2.sentence-1'>.</a></div> <div id='forward.list.overview-2.sentence-2' class='sentence'>In addition, a <span class='texttt'>forward_<span class='shy'></span>list</span>
provides the <span class='texttt'>assign</span> member functions and
several of the optional sequence container requirements (<a href='#sequence.reqmts' title='24.2.4&emsp;Sequence containers'>[sequence.<span class='shy'></span>reqmts]</a>)<a class='hidden_link' href='#forward.list.overview-2.sentence-2'>.</a></div> <div id='forward.list.overview-2.sentence-3' class='sentence'>Descriptions are provided here only for operations on
<span class='texttt'>forward_<span class='shy'></span>list</span> that are not described in that table or for operations where there
is additional semantic information<a class='hidden_link' href='#forward.list.overview-2.sentence-3'>.</a></div></div></div>

<div class='para added' id='forward.list.overview-3'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.overview-3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href=''>#</a></div>
<div class='texpara'>The types <span class="texttt">iterator</span> and <span class="texttt">const_iterator</span> meet the constexpr iterator requirements (<a href="iterator.requirements.general" title="25.3.1 General">[iterator.<span class="shy"></span>requirements.<span class="shy"></span>general]</a>).</div></div>

<div class='para' id='forward.list.overview-3'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.overview-3'><span class="removed">3</span><span class="added">4</span></a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7017'>#</a></div><div class='texpara'><div id='forward.list.overview-note-2' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#forward.list.overview-note-2'>2</a></i>:&ensp;<div id='forward.list.overview-3.sentence-1' class='sentence'>Modifying any list requires access to the element preceding the first element
of interest, but in a <span class='texttt'>forward_<span class='shy'></span>list</span> there is no constant-time way to access a
preceding element<a class='hidden_link' href='#forward.list.overview-3.sentence-1'>.</a></div> <div id='forward.list.overview-3.sentence-2' class='sentence'>For this reason, <span class='texttt'>erase_<span class='shy'></span>after</span> and <span class='texttt'>splice_<span class='shy'></span>after</span>
take fully-open ranges, not semi-open ranges<a class='hidden_link' href='#forward.list.overview-3.sentence-2'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div>
<div class='texpara'><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> forward_list <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> value_type      <span class='operator'>=</span> T;
    <span class='keyword'>using</span> allocator_type  <span class='operator'>=</span> Allocator;
    <span class='keyword'>using</span> pointer         <span class='operator'>=</span> <span class='keyword'>typename</span> allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>pointer;
    <span class='keyword'>using</span> const_pointer   <span class='operator'>=</span> <span class='keyword'>typename</span> allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>const_pointer;
    <span class='keyword'>using</span> reference       <span class='operator'>=</span> value_type<span class='operator'>&amp;</span>;
    <span class='keyword'>using</span> const_reference <span class='operator'>=</span> <span class='keyword'>const</span> value_type<span class='operator'>&amp;</span>;
    <span class='keyword'>using</span> size_type       <span class='operator'>=</span> <a class='index' id=':type_of_forward_list::size_type'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> difference_type <span class='operator'>=</span> <a class='index' id=':type_of_forward_list::difference_type'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> iterator        <span class='operator'>=</span> <a class='index' id=':type_of_forward_list::iterator'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> const_iterator  <span class='operator'>=</span> <a class='index' id=':type_of_forward_list::const_iterator'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>

    <span class='comment'>// <a href='#forward.list.cons' title='24.3.10.2&emsp;Constructors, copy, and assignment'>[forward.<span class='shy'></span>list.<span class='shy'></span>cons]</a>, construct/copy/destroy</span>
    <span class="keyword added">constexpr</span> forward_list<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>:</span> forward_list<span class='parenthesis'>(</span>Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> forward_list<span class='parenthesis'>(</span><span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> forward_list<span class='parenthesis'>(</span>size_type n, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> forward_list<span class='parenthesis'>(</span>size_type n, <span class='keyword'>const</span> T<span class='operator'>&amp;</span> value, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> forward_list<span class='parenthesis'>(</span>InputIterator first, InputIterator last, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range____________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> forward_list<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> forward_list<span class='parenthesis'>(</span><span class='keyword'>const</span> forward_list<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> forward_list<span class='parenthesis'>(</span>forward_list<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> forward_list<span class='parenthesis'>(</span><span class='keyword'>const</span> forward_list<span class='operator'>&amp;</span> x, <span class='keyword'>const</span> type_identity_t<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> forward_list<span class='parenthesis'>(</span>forward_list<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x, <span class='keyword'>const</span> type_identity_t<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> forward_list<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='operator'>~</span>forward_list<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> forward_list<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> forward_list<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> forward_list<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span>forward_list<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>
      <span class='keyword'>noexcept</span><span class='parenthesis'>(</span>allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>is_always_equal<span class='operator'>::</span>value<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> forward_list<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> assign<span class='parenthesis'>(</span>InputIterator first, InputIterator last<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range_____________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> assign_range<span class='parenthesis'>(</span>R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> assign<span class='parenthesis'>(</span>size_type n, <span class='keyword'>const</span> T<span class='operator'>&amp;</span> t<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> assign<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> allocator_type get_allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// <a href='#forward.list.iter' title='24.3.10.3&emsp;Iterators'>[forward.<span class='shy'></span>list.<span class='shy'></span>iter]</a>, iterators</span>
    <span class="keyword added">constexpr</span> iterator before_begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator before_begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> iterator begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> iterator end<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator end<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class="keyword added">constexpr</span> const_iterator cbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator cbefore_begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator cend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// capacity</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> size_type max_size<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// <a href='#forward.list.access' title='24.3.10.4&emsp;Element access'>[forward.<span class='shy'></span>list.<span class='shy'></span>access]</a>, element access</span>
    <span class="keyword added">constexpr</span> reference front<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> const_reference front<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// <a href='#forward.list.modifiers' title='24.3.10.5&emsp;Modifiers'>[forward.<span class='shy'></span>list.<span class='shy'></span>modifiers]</a>, modifiers</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> reference emplace_front<span class='parenthesis'>(</span>Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> push_front<span class='parenthesis'>(</span><span class='keyword'>const</span> T<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> push_front<span class='parenthesis'>(</span>T<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range______________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> prepend_range<span class='parenthesis'>(</span>R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> pop_front<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;

    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator emplace_after<span class='parenthesis'>(</span>const_iterator position, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator insert_after<span class='parenthesis'>(</span>const_iterator position, <span class='keyword'>const</span> T<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator insert_after<span class='parenthesis'>(</span>const_iterator position, T<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> iterator insert_after<span class='parenthesis'>(</span>const_iterator position, size_type n, <span class='keyword'>const</span> T<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> iterator insert_after<span class='parenthesis'>(</span>const_iterator position, InputIterator first, InputIterator last<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator insert_after<span class='parenthesis'>(</span>const_iterator position, initializer_list<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> il<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range_______________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> iterator insert_range_after<span class='parenthesis'>(</span>const_iterator position, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> iterator erase_after<span class='parenthesis'>(</span>const_iterator position<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator erase_after<span class='parenthesis'>(</span>const_iterator position, const_iterator last<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> swap<span class='parenthesis'>(</span>forward_list<span class='operator'>&amp;</span><span class='parenthesis'>)</span>
      <span class='keyword'>noexcept</span><span class='parenthesis'>(</span>allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>is_always_equal<span class='operator'>::</span>value<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> resize<span class='parenthesis'>(</span>size_type sz<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> resize<span class='parenthesis'>(</span>size_type sz, <span class='keyword'>const</span> value_type<span class='operator'>&amp;</span> c<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> clear<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// <a href='#forward.list.ops' title='24.3.10.6&emsp;Operations'>[forward.<span class='shy'></span>list.<span class='shy'></span>ops]</a>, <span class='tcode_in_codeblock'>forward_<span class='shy'></span>list</span> operations</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> splice_after<span class='parenthesis'>(</span>const_iterator position, forward_list<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> splice_after<span class='parenthesis'>(</span>const_iterator position, forward_list<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> splice_after<span class='parenthesis'>(</span>const_iterator position, forward_list<span class='operator'>&amp;</span> x, const_iterator i<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> splice_after<span class='parenthesis'>(</span>const_iterator position, forward_list<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x, const_iterator i<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> splice_after<span class='parenthesis'>(</span>const_iterator position, forward_list<span class='operator'>&amp;</span> x,
                      const_iterator first, const_iterator last<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> splice_after<span class='parenthesis'>(</span>const_iterator position, forward_list<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x,
                      const_iterator first, const_iterator last<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> size_type remove<span class='parenthesis'>(</span><span class='keyword'>const</span> T<span class='operator'>&amp;</span> value<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Predicate<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> size_type remove_if<span class='parenthesis'>(</span>Predicate pred<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> size_type unique<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> BinaryPredicate<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> size_type unique<span class='parenthesis'>(</span>BinaryPredicate binary_pred<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>forward_list<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>forward_list<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Compare<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>forward_list<span class='operator'>&amp;</span> x, Compare comp<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Compare<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>forward_list<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x, Compare comp<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> sort<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Compare<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> <span class='keyword'>void</span> sort<span class='parenthesis'>(</span>Compare comp<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> reverse<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
  <span class='curlybracket'>}</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    forward_list<span class='parenthesis'>(</span>InputIterator, InputIterator, Allocator <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> forward_list<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range__'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R, <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    forward_list<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, Allocator <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> forward_list<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>}</span>
</span></div></div><div class='para' id='forward.list.overview-4'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.overview-4'><span class="removed">4</span><span class="added">5</span></a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7155'>#</a></div><div class='texpara'><div id='forward.list.overview-4.sentence-1' class='sentence'>An incomplete type <span class='texttt'>T</span> may be used when instantiating <span class='texttt'>forward_<span class='shy'></span>list</span>
if the allocator meets the
<a href='allocator.requirements.completeness' title='16.4.4.6.2&emsp;Allocator completeness requirements&emsp;[allocator.requirements.completeness]'>allocator completeness requirements</a><a class='hidden_link' href='#forward.list.overview-4.sentence-1'>.</a></div> <div id='forward.list.overview-4.sentence-2' class='sentence'><span class='texttt'>T</span> shall be complete before any member of the resulting specialization
of <span class='texttt'>forward_<span class='shy'></span>list</span> is referenced<a class='hidden_link' href='#forward.list.overview-4.sentence-2'>.</a></div></div></div></div><div id='forward.list.cons' class='section'><h4 ><a class='secnum' href='#forward.list.cons' style='min-width:95pt'>24.3.10.2</a> Constructors, copy, and assignment <a class='abbr_ref' href='forward.list.cons'>[forward.list.cons]</a></h4><div class='texpara'><div id='lib:forward_list,constructor'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:forward_list,constructor'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> forward_list<span class='parenthesis'>(</span><span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='forward.list.cons-1'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.cons-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7170'>#</a></div><div class='texpara'><div id='forward.list.cons-1.sentence-1' class='sentence'><i >Effects</i>: Constructs an empty <span class='texttt'>forward_<span class='shy'></span>list</span> object using the specified allocator<a class='hidden_link' href='#forward.list.cons-1.sentence-1'>.</a></div></div></div></div><div class='para' id='forward.list.cons-2'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.cons-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7174'>#</a></div><div class='texpara'><div id='forward.list.cons-2.sentence-1' class='sentence'><i >Complexity</i>: Constant<a class='hidden_link' href='#forward.list.cons-2.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:forward_list,constructor_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:forward_list,constructor_'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> forward_list<span class='parenthesis'>(</span>size_type n, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='forward.list.cons-3'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.cons-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7185'>#</a></div><div class='texpara'><div id='forward.list.cons-3.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>T</span> is <i >Cpp17DefaultInsertable</i> into <span class='texttt'>forward_<span class='shy'></span>list</span><a class='hidden_link' href='#forward.list.cons-3.sentence-1'>.</a></div></div></div></div><div class='para' id='forward.list.cons-4'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.cons-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7189'>#</a></div><div class='texpara'><div id='forward.list.cons-4.sentence-1' class='sentence'><i >Effects</i>: Constructs a <span class='texttt'>forward_<span class='shy'></span>list</span> object with <span class='texttt'>n</span>
default-inserted elements using the specified allocator<a class='hidden_link' href='#forward.list.cons-4.sentence-1'>.</a></div></div></div></div><div class='para' id='forward.list.cons-5'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.cons-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7194'>#</a></div><div class='texpara'><div id='forward.list.cons-5.sentence-1' class='sentence'><i >Complexity</i>: Linear in <span class='texttt'>n</span><a class='hidden_link' href='#forward.list.cons-5.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:forward_list,constructor__'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:forward_list,constructor__'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> forward_list<span class='parenthesis'>(</span>size_type n, <span class='keyword'>const</span> T<span class='operator'>&amp;</span> value, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='forward.list.cons-6'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.cons-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7205'>#</a></div><div class='texpara'><div id='forward.list.cons-6.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>T</span> is <i >Cpp17CopyInsertable</i> into <span class='texttt'>forward_<span class='shy'></span>list</span><a class='hidden_link' href='#forward.list.cons-6.sentence-1'>.</a></div></div></div></div><div class='para' id='forward.list.cons-7'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.cons-7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7209'>#</a></div><div class='texpara'><div id='forward.list.cons-7.sentence-1' class='sentence'><i >Effects</i>: Constructs a <span class='texttt'>forward_<span class='shy'></span>list</span> object with <span class='texttt'>n</span> copies of <span class='texttt'>value</span> using the specified allocator<a class='hidden_link' href='#forward.list.cons-7.sentence-1'>.</a></div></div></div></div><div class='para' id='forward.list.cons-8'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.cons-8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7213'>#</a></div><div class='texpara'><div id='forward.list.cons-8.sentence-1' class='sentence'><i >Complexity</i>: Linear in <span class='texttt'>n</span><a class='hidden_link' href='#forward.list.cons-8.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:forward_list,constructor___'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:forward_list,constructor___'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> forward_list<span class='parenthesis'>(</span>InputIterator first, InputIterator last, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='forward.list.cons-9'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.cons-9'>9</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7225'>#</a></div><div class='texpara'><div id='forward.list.cons-9.sentence-1' class='sentence'><i >Effects</i>: Constructs a <span class='texttt'>forward_<span class='shy'></span>list</span> object equal to the range [<span class='texttt'>first, last</span>)<a class='hidden_link' href='#forward.list.cons-9.sentence-1'>.</a></div></div></div></div><div class='para' id='forward.list.cons-10'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.cons-10'>10</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7229'>#</a></div><div class='texpara'><div id='forward.list.cons-10.sentence-1' class='sentence'><i >Complexity</i>: Linear in <span class='texttt'>distance<span class='parenthesis'>(</span>first, last<span class='parenthesis'>)</span></span><a class='hidden_link' href='#forward.list.cons-10.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:forward_list,constructor____'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:forward_list,constructor____'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range________________'><span class='texttt'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> forward_list<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='forward.list.cons-11'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.cons-11'>11</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7241'>#</a></div><div class='texpara'><div id='forward.list.cons-11.sentence-1' class='sentence'><i >Effects</i>: Constructs a <span class='texttt'>forward_<span class='shy'></span>list</span> object
with the elements of the range <span class='texttt'>rg</span><a class='hidden_link' href='#forward.list.cons-11.sentence-1'>.</a></div></div></div></div><div class='para' id='forward.list.cons-12'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.cons-12'>12</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7246'>#</a></div><div class='texpara'><div id='forward.list.cons-12.sentence-1' class='sentence'><i >Complexity</i>: Linear in <span class='texttt'>ranges<span class='operator'>&#x200b;::&#x200b;</span>distance<span class='parenthesis'>(</span>rg<span class='parenthesis'>)</span></span><a class='hidden_link' href='#forward.list.cons-12.sentence-1'>.</a></div></div></div></div></div><div id='forward.list.iter' class='section'><h4 ><a class='secnum' href='#forward.list.iter' style='min-width:95pt'>24.3.10.3</a> Iterators <a class='abbr_ref' href='forward.list.iter'>[forward.list.iter]</a></h4><div class='texpara'><div id='lib:forward_list,cbefore_begin'><div id='lib:cbefore_begin,forward_list'><div id='lib:forward_list,before_begin'><div id='lib:before_begin,forward_list'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:before_begin,forward_list'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> iterator before_begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
<span class="keyword added">constexpr</span> const_iterator before_begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
<span class="keyword added">constexpr</span> const_iterator cbefore_begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
</code></div></div></div></div></div></div><div class='para' id='forward.list.iter-1'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.iter-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7262'>#</a></div><div class='texpara'><div id='forward.list.iter-1.sentence-1' class='sentence'><i >Effects</i>: <span class='texttt'>cbefore_<span class='shy'></span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> is equivalent to
<span class='texttt'><span class='keyword'>const_<span class='shy'></span>cast</span><span class='anglebracket'>&lt;</span>forward_<span class='shy'></span>list <span class='keyword'>const</span><span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='operator'>*</span><span class='keyword'>this</span><span class='parenthesis'>)</span><span class='operator'>.</span>before_<span class='shy'></span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#forward.list.iter-1.sentence-1'>.</a></div></div></div></div><div class='para' id='forward.list.iter-2'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.iter-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7267'>#</a></div><div class='texpara'><div id='forward.list.iter-2.sentence-1' class='sentence'><i >Returns</i>: A non-dereferenceable iterator that, when incremented, is equal to the iterator
returned by <span class='texttt'>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#forward.list.iter-2.sentence-1'>.</a></div></div></div></div><div class='para' id='forward.list.iter-3'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.iter-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7272'>#</a></div><div class='texpara'><div id='forward.list.iter-3.sentence-1' class='sentence'><i >Remarks</i>: <span class='texttt'>before_<span class='shy'></span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> end<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> shall equal <span class='texttt'><span class='literal'>false</span></span><a class='hidden_link' href='#forward.list.iter-3.sentence-1'>.</a></div></div></div></div></div><div id='forward.list.access' class='section'><h4 ><a class='secnum' href='#forward.list.access' style='min-width:95pt'>24.3.10.4</a> Element access <a class='abbr_ref' href='forward.list.access'>[forward.list.access]</a></h4><div class='texpara'><div id='lib:forward_list,front'><div id='lib:front,forward_list'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:front,forward_list'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> reference front<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
<span class="keyword added">constexpr</span> const_reference front<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para' id='forward.list.access-1'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.access-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7286'>#</a></div><div class='texpara'><div id='forward.list.access-1.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'><span class='operator'>*</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span></div></div></div></div></div><div id='forward.list.modifiers' class='section'><h4 ><a class='secnum' href='#forward.list.modifiers' style='min-width:95pt'>24.3.10.5</a> Modifiers <a class='abbr_ref' href='forward.list.modifiers'>[forward.list.modifiers]</a></h4><div class='para' id='forward.list.modifiers-1'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.modifiers-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7293'>#</a></div><div class='texpara'><div id='forward.list.modifiers-1.sentence-1' class='sentence'>None of the overloads of <span class='texttt'>insert_<span class='shy'></span>after</span> shall affect the validity of iterators and
references, and <span class='texttt'>erase_<span class='shy'></span>after</span> shall invalidate only iterators and references to
the erased elements<a class='hidden_link' href='#forward.list.modifiers-1.sentence-1'>.</a></div> <div id='forward.list.modifiers-1.sentence-2' class='sentence'>If an exception is thrown during <span class='texttt'>insert_<span class='shy'></span>after</span> there shall
be no effect<a class='hidden_link' href='#forward.list.modifiers-1.sentence-2'>.</a></div> <div id='forward.list.modifiers-1.sentence-3' class='sentence'>Inserting <span class='texttt'>n</span> elements into a <span class='texttt'>forward_<span class='shy'></span>list</span> is linear in
<span class='texttt'>n</span>, and the number of calls to the copy or move constructor of <span class='texttt'>T</span> is
exactly equal to <span class='texttt'>n</span><a class='hidden_link' href='#forward.list.modifiers-1.sentence-3'>.</a></div> <div id='forward.list.modifiers-1.sentence-4' class='sentence'>Erasing <span class='texttt'>n</span> elements from a <span class='texttt'>forward_<span class='shy'></span>list</span> is
linear in <span class='texttt'>n</span> and the number of calls to the destructor of type <span class='texttt'>T</span> is
exactly equal to <span class='texttt'>n</span><a class='hidden_link' href='#forward.list.modifiers-1.sentence-4'>.</a></div></div></div><div class='texpara'><div id='lib:forward_list,emplace_front'><div id='lib:emplace_front,forward_list'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:emplace_front,forward_list'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> reference emplace_front<span class='parenthesis'>(</span>Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='forward.list.modifiers-2'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.modifiers-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7309'>#</a></div><div class='texpara'><div id='forward.list.modifiers-2.sentence-1' class='sentence'><i >Effects</i>: Inserts an object of type <span class='texttt'>value_<span class='shy'></span>type</span> constructed with
<span class='texttt'>value_<span class='shy'></span>type<span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>Args<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>&#x200b;args<span class='parenthesis'>)</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span></span> at the beginning of the list<a class='hidden_link' href='#forward.list.modifiers-2.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:forward_list,push_front'><div id='lib:push_front,forward_list'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:push_front,forward_list'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>void</span> push_front<span class='parenthesis'>(</span><span class='keyword'>const</span> T<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
<span class="keyword added">constexpr</span> <span class='keyword'>void</span> push_front<span class='parenthesis'>(</span>T<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='forward.list.modifiers-3'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.modifiers-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7322'>#</a></div><div class='texpara'><div id='forward.list.modifiers-3.sentence-1' class='sentence'><i >Effects</i>: Inserts a copy of <span class='texttt'>x</span> at the beginning of the list<a class='hidden_link' href='#forward.list.modifiers-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:forward_list,prepend_range'><div id='lib:prepend_range,forward_list'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:prepend_range,forward_list'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range_________________'><span class='texttt'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>void</span> prepend_range<span class='parenthesis'>(</span>R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='forward.list.modifiers-4'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.modifiers-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7334'>#</a></div><div class='texpara'><div id='forward.list.modifiers-4.sentence-1' class='sentence'><i >Effects</i>: Inserts a copy of each element of <span class='texttt'>rg</span> at the beginning of the list<a class='hidden_link' href='#forward.list.modifiers-4.sentence-1'>.</a></div> <div id='forward.list.modifiers-note-1' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#forward.list.modifiers-note-1'>1</a></i>:&ensp;<div id='forward.list.modifiers-4.sentence-2' class='sentence'>The order of elements is not reversed<a class='hidden_link' href='#forward.list.modifiers-4.sentence-2'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div></div></div><div class='texpara'><div id='lib:forward_list,pop'><div id='lib:pop,forward_list'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:pop,forward_list'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>void</span> pop_front<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='forward.list.modifiers-5'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.modifiers-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7348'>#</a></div><div class='texpara'><div id='forward.list.modifiers-5.sentence-1' class='sentence'><i >Effects</i>: As if by <span class='texttt'>erase_<span class='shy'></span>after<span class='parenthesis'>(</span>before_<span class='shy'></span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#forward.list.modifiers-5.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:forward_list,insert_after'><div id='lib:insert_after,forward_list'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:insert_after,forward_list'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> iterator insert_after<span class='parenthesis'>(</span>const_iterator position, <span class='keyword'>const</span> T<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='forward.list.modifiers-6'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.modifiers-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7359'>#</a></div><div class='texpara'><div id='forward.list.modifiers-6.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>T</span> is <i >Cpp17CopyInsertable</i> into <span class='texttt'>forward_<span class='shy'></span>list</span><a class='hidden_link' href='#forward.list.modifiers-6.sentence-1'>.</a></div> <div id='forward.list.modifiers-6.sentence-2' class='sentence'><span class='texttt'>position</span> is <span class='texttt'>before_<span class='shy'></span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> or is a dereferenceable
iterator in the range [<span class='texttt'>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, end<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>)<a class='hidden_link' href='#forward.list.modifiers-6.sentence-2'>.</a></div></div></div></div><div class='para' id='forward.list.modifiers-7'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.modifiers-7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7365'>#</a></div><div class='texpara'><div id='forward.list.modifiers-7.sentence-1' class='sentence'><i >Effects</i>: Inserts a copy of <span class='texttt'>x</span> after <span class='texttt'>position</span><a class='hidden_link' href='#forward.list.modifiers-7.sentence-1'>.</a></div></div></div></div><div class='para' id='forward.list.modifiers-8'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.modifiers-8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7369'>#</a></div><div class='texpara'><div id='forward.list.modifiers-8.sentence-1' class='sentence'><i >Returns</i>: An iterator pointing to the copy of <span class='texttt'>x</span><a class='hidden_link' href='#forward.list.modifiers-8.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:forward_list,insert_after_'><div id='lib:insert_after,forward_list_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:insert_after,forward_list_'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> iterator insert_after<span class='parenthesis'>(</span>const_iterator position, T<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='forward.list.modifiers-9'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.modifiers-9'>9</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7380'>#</a></div><div class='texpara'><div id='forward.list.modifiers-9.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>T</span> is <i >Cpp17MoveInsertable</i> into <span class='texttt'>forward_<span class='shy'></span>list</span><a class='hidden_link' href='#forward.list.modifiers-9.sentence-1'>.</a></div> <div id='forward.list.modifiers-9.sentence-2' class='sentence'><span class='texttt'>position</span> is <span class='texttt'>before_<span class='shy'></span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> or is a dereferenceable
iterator in the range [<span class='texttt'>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, end<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>)<a class='hidden_link' href='#forward.list.modifiers-9.sentence-2'>.</a></div></div></div></div><div class='para' id='forward.list.modifiers-10'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.modifiers-10'>10</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7386'>#</a></div><div class='texpara'><div id='forward.list.modifiers-10.sentence-1' class='sentence'><i >Effects</i>: Inserts a copy of <span class='texttt'>x</span> after <span class='texttt'>position</span><a class='hidden_link' href='#forward.list.modifiers-10.sentence-1'>.</a></div></div></div></div><div class='para' id='forward.list.modifiers-11'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.modifiers-11'>11</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7390'>#</a></div><div class='texpara'><div id='forward.list.modifiers-11.sentence-1' class='sentence'><i >Returns</i>: An iterator pointing to the copy of <span class='texttt'>x</span><a class='hidden_link' href='#forward.list.modifiers-11.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:forward_list,insert_after__'><div id='lib:insert_after,forward_list__'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:insert_after,forward_list__'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> iterator insert_after<span class='parenthesis'>(</span>const_iterator position, size_type n, <span class='keyword'>const</span> T<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='forward.list.modifiers-12'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.modifiers-12'>12</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7401'>#</a></div><div class='texpara'><div id='forward.list.modifiers-12.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>T</span> is <i >Cpp17CopyInsertable</i> into <span class='texttt'>forward_<span class='shy'></span>list</span><a class='hidden_link' href='#forward.list.modifiers-12.sentence-1'>.</a></div> <div id='forward.list.modifiers-12.sentence-2' class='sentence'><span class='texttt'>position</span> is <span class='texttt'>before_<span class='shy'></span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> or is a dereferenceable
iterator in the range [<span class='texttt'>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, end<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>)<a class='hidden_link' href='#forward.list.modifiers-12.sentence-2'>.</a></div></div></div></div><div class='para' id='forward.list.modifiers-13'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.modifiers-13'>13</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7407'>#</a></div><div class='texpara'><div id='forward.list.modifiers-13.sentence-1' class='sentence'><i >Effects</i>: Inserts <span class='texttt'>n</span> copies of <span class='texttt'>x</span> after <span class='texttt'>position</span><a class='hidden_link' href='#forward.list.modifiers-13.sentence-1'>.</a></div></div></div></div><div class='para' id='forward.list.modifiers-14'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.modifiers-14'>14</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7411'>#</a></div><div class='texpara'><div id='forward.list.modifiers-14.sentence-1' class='sentence'><i >Returns</i>: An iterator pointing to the last inserted copy of <span class='texttt'>x</span>, or
<span class='texttt'>position</span> if <span class='texttt'>n <span class='operator'>=</span><span class='operator'>=</span> <span class='literal'>0</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#forward.list.modifiers-14.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:forward_list,insert_after___'><div id='lib:insert_after,forward_list___'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:insert_after,forward_list___'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> iterator insert_after<span class='parenthesis'>(</span>const_iterator position, InputIterator first, InputIterator last<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='forward.list.modifiers-15'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.modifiers-15'>15</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7424'>#</a></div><div class='texpara'><div id='forward.list.modifiers-15.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>T</span> is <i >Cpp17EmplaceConstructible</i> into <span class='texttt'>forward_<span class='shy'></span>list</span>
from <span class='texttt'><span class='operator'>*</span>first</span><a class='hidden_link' href='#forward.list.modifiers-15.sentence-1'>.</a></div> <div id='forward.list.modifiers-15.sentence-2' class='sentence'><span class='texttt'>position</span> is <span class='texttt'>before_<span class='shy'></span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> or is a dereferenceable
iterator in the range [<span class='texttt'>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, end<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>)<a class='hidden_link' href='#forward.list.modifiers-15.sentence-2'>.</a></div> <div id='forward.list.modifiers-15.sentence-3' class='sentence'>Neither <span class='texttt'>first</span> nor <span class='texttt'>last</span> are iterators in <span class='texttt'><span class='operator'>*</span><span class='keyword'>this</span></span><a class='hidden_link' href='#forward.list.modifiers-15.sentence-3'>.</a></div></div></div></div><div class='para' id='forward.list.modifiers-16'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.modifiers-16'>16</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7432'>#</a></div><div class='texpara'><div id='forward.list.modifiers-16.sentence-1' class='sentence'><i >Effects</i>: Inserts copies of elements in [<span class='texttt'>first, last</span>) after <span class='texttt'>position</span><a class='hidden_link' href='#forward.list.modifiers-16.sentence-1'>.</a></div></div></div></div><div class='para' id='forward.list.modifiers-17'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.modifiers-17'>17</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7436'>#</a></div><div class='texpara'><div id='forward.list.modifiers-17.sentence-1' class='sentence'><i >Returns</i>: An iterator pointing to the last inserted element, or
<span class='texttt'>position</span> if <span class='texttt'>first <span class='operator'>=</span><span class='operator'>=</span> last</span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#forward.list.modifiers-17.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:forward_list,insert_range_after'><div id='lib:insert_range_after,forward_list'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:insert_range_after,forward_list'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range__________________'><span class='texttt'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> iterator insert_range_after<span class='parenthesis'>(</span>const_iterator position, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='forward.list.modifiers-18'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.modifiers-18'>18</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7449'>#</a></div><div class='texpara'><div id='forward.list.modifiers-18.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>T</span> is <i >Cpp17EmplaceConstructible</i> into <span class='texttt'>forward_<span class='shy'></span>list</span>
from <span class='texttt'><span class='operator'>*</span>ranges<span class='operator'>&#x200b;::&#x200b;</span>begin<span class='parenthesis'>(</span>rg<span class='parenthesis'>)</span></span><a class='hidden_link' href='#forward.list.modifiers-18.sentence-1'>.</a></div> <div id='forward.list.modifiers-18.sentence-2' class='sentence'><span class='texttt'>position</span> is <span class='texttt'>before_<span class='shy'></span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> or
is a dereferenceable iterator in the range [<span class='texttt'>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, end<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>)<a class='hidden_link' href='#forward.list.modifiers-18.sentence-2'>.</a></div> <div id='forward.list.modifiers-18.sentence-3' class='sentence'><span class='texttt'>rg</span> and <span class='texttt'><span class='operator'>*</span><span class='keyword'>this</span></span> do not overlap<a class='hidden_link' href='#forward.list.modifiers-18.sentence-3'>.</a></div></div></div></div><div class='para' id='forward.list.modifiers-19'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.modifiers-19'>19</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7457'>#</a></div><div class='texpara'><div id='forward.list.modifiers-19.sentence-1' class='sentence'><i >Effects</i>: Inserts copies of elements in the range <span class='texttt'>rg</span> after <span class='texttt'>position</span><a class='hidden_link' href='#forward.list.modifiers-19.sentence-1'>.</a></div></div></div></div><div class='para' id='forward.list.modifiers-20'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.modifiers-20'>20</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7461'>#</a></div><div class='texpara'><div id='forward.list.modifiers-20.sentence-1' class='sentence'><i >Returns</i>: An iterator pointing to the last inserted element,
or <span class='texttt'>position</span> if <span class='texttt'>rg</span> is empty<a class='hidden_link' href='#forward.list.modifiers-20.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:forward_list,insert_after____'><div id='lib:insert_after,forward_list____'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:insert_after,forward_list____'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> iterator insert_after<span class='parenthesis'>(</span>const_iterator position, initializer_list<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> il<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='forward.list.modifiers-21'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.modifiers-21'>21</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7473'>#</a></div><div class='texpara'><div id='forward.list.modifiers-21.sentence-1' class='sentence'><i >Effects</i>: Equivalent to: <span class='texttt'><span class='keyword'>return</span> insert_<span class='shy'></span>after<span class='parenthesis'>(</span>position, il<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, il<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;</span></div></div></div></div><div class='texpara'><div id='lib:forward_list,emplace_after'><div id='lib:emplace_after,forward_list'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:emplace_after,forward_list'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> iterator emplace_after<span class='parenthesis'>(</span>const_iterator position, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='forward.list.modifiers-22'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.modifiers-22'>22</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7486'>#</a></div><div class='texpara'><div id='forward.list.modifiers-22.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>T</span> is <i >Cpp17EmplaceConstructible</i> into <span class='texttt'>forward_<span class='shy'></span>list</span>
from <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>Args<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>args<span class='parenthesis'>)</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span></span><a class='hidden_link' href='#forward.list.modifiers-22.sentence-1'>.</a></div> <div id='forward.list.modifiers-22.sentence-2' class='sentence'><span class='texttt'>position</span> is <span class='texttt'>before_<span class='shy'></span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> or is a dereferenceable
iterator in the range [<span class='texttt'>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, end<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>)<a class='hidden_link' href='#forward.list.modifiers-22.sentence-2'>.</a></div></div></div></div><div class='para' id='forward.list.modifiers-23'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.modifiers-23'>23</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7493'>#</a></div><div class='texpara'><div id='forward.list.modifiers-23.sentence-1' class='sentence'><i >Effects</i>: Inserts an object of type <span class='texttt'>value_<span class='shy'></span>type</span> direct-non-list-initialized with
<span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>Args<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>args<span class='parenthesis'>)</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span></span> after <span class='texttt'>position</span><a class='hidden_link' href='#forward.list.modifiers-23.sentence-1'>.</a></div></div></div></div><div class='para' id='forward.list.modifiers-24'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.modifiers-24'>24</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7498'>#</a></div><div class='texpara'><div id='forward.list.modifiers-24.sentence-1' class='sentence'><i >Returns</i>: An iterator pointing to the new object<a class='hidden_link' href='#forward.list.modifiers-24.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:forward_list,erase_after'><div id='lib:erase_after,forward_list'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:erase_after,forward_list'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> iterator erase_after<span class='parenthesis'>(</span>const_iterator position<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='forward.list.modifiers-25'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.modifiers-25'>25</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7509'>#</a></div><div class='texpara'><div id='forward.list.modifiers-25.sentence-1' class='sentence'><i >Preconditions</i>: The iterator following <span class='texttt'>position</span> is dereferenceable<a class='hidden_link' href='#forward.list.modifiers-25.sentence-1'>.</a></div></div></div></div><div class='para' id='forward.list.modifiers-26'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.modifiers-26'>26</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7513'>#</a></div><div class='texpara'><div id='forward.list.modifiers-26.sentence-1' class='sentence'><i >Effects</i>: Erases the element pointed to by the iterator following <span class='texttt'>position</span><a class='hidden_link' href='#forward.list.modifiers-26.sentence-1'>.</a></div></div></div></div><div class='para' id='forward.list.modifiers-27'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.modifiers-27'>27</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7517'>#</a></div><div class='texpara'><div id='forward.list.modifiers-27.sentence-1' class='sentence'><i >Returns</i>: An iterator pointing to the element following the one that was
erased, or <span class='texttt'>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> if no such element exists<a class='hidden_link' href='#forward.list.modifiers-27.sentence-1'>.</a></div></div></div></div><div class='para' id='forward.list.modifiers-28'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.modifiers-28'>28</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7522'>#</a></div><div class='texpara'><div id='forward.list.modifiers-28.sentence-1' class='sentence'><i >Throws</i>: Nothing<a class='hidden_link' href='#forward.list.modifiers-28.sentence-1'>.</a></div></div></div></div><div class='texpara'><div class='itemdecl' id='forward.list.modifiers-itemdecl:13'><div class='marginalizedparent'><a class='itemDeclLink' href='#forward.list.modifiers-itemdecl:13'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> iterator erase_after<span class='parenthesis'>(</span>const_iterator position, const_iterator last<span class='parenthesis'>)</span>;
</code></div></div><div class='para' id='forward.list.modifiers-29'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.modifiers-29'>29</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7532'>#</a></div><div class='texpara'><div id='forward.list.modifiers-29.sentence-1' class='sentence'><i >Preconditions</i>: All iterators in the range (<span class='texttt'>position, last</span>) are dereferenceable<a class='hidden_link' href='#forward.list.modifiers-29.sentence-1'>.</a></div></div></div></div><div class='para' id='forward.list.modifiers-30'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.modifiers-30'>30</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7536'>#</a></div><div class='texpara'><div id='forward.list.modifiers-30.sentence-1' class='sentence'><i >Effects</i>: Erases the elements in the range (<span class='texttt'>position, last</span>)<a class='hidden_link' href='#forward.list.modifiers-30.sentence-1'>.</a></div></div></div></div><div class='para' id='forward.list.modifiers-31'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.modifiers-31'>31</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7540'>#</a></div><div class='texpara'><div id='forward.list.modifiers-31.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>last</span><a class='hidden_link' href='#forward.list.modifiers-31.sentence-1'>.</a></div></div></div></div><div class='para' id='forward.list.modifiers-32'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.modifiers-32'>32</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7544'>#</a></div><div class='texpara'><div id='forward.list.modifiers-32.sentence-1' class='sentence'><i >Throws</i>: Nothing<a class='hidden_link' href='#forward.list.modifiers-32.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:forward_list,resize'><div id='lib:resize,forward_list'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:resize,forward_list'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>void</span> resize<span class='parenthesis'>(</span>size_type sz<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='forward.list.modifiers-33'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.modifiers-33'>33</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7555'>#</a></div><div class='texpara'><div id='forward.list.modifiers-33.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>T</span> is <i >Cpp17DefaultInsertable</i> into <span class='texttt'>forward_<span class='shy'></span>list</span><a class='hidden_link' href='#forward.list.modifiers-33.sentence-1'>.</a></div></div></div></div><div class='para' id='forward.list.modifiers-34'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.modifiers-34'>34</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7559'>#</a></div><div class='texpara'><div id='forward.list.modifiers-34.sentence-1' class='sentence'><i >Effects</i>: If <span class='texttt'>sz <span class='anglebracket'>&lt;</span> distance<span class='parenthesis'>(</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, end<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span>, erases the last <span class='texttt'>distance<span class='parenthesis'>(</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
end<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>-</span> sz</span> elements from the list<a class='hidden_link' href='#forward.list.modifiers-34.sentence-1'>.</a></div> <div id='forward.list.modifiers-34.sentence-2' class='sentence'>Otherwise, inserts <span class='texttt'>sz <span class='operator'>-</span> distance<span class='parenthesis'>(</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, end<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span> default-inserted
elements at the end of the list<a class='hidden_link' href='#forward.list.modifiers-34.sentence-2'>.</a></div></div></div></div><div class='texpara'><div class='itemdecl' id='forward.list.modifiers-itemdecl:15'><div class='marginalizedparent'><a class='itemDeclLink' href='#forward.list.modifiers-itemdecl:15'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>void</span> resize<span class='parenthesis'>(</span>size_type sz, <span class='keyword'>const</span> value_type<span class='operator'>&amp;</span> c<span class='parenthesis'>)</span>;
</code></div></div><div class='para' id='forward.list.modifiers-35'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.modifiers-35'>35</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7571'>#</a></div><div class='texpara'><div id='forward.list.modifiers-35.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>T</span> is <i >Cpp17CopyInsertable</i> into <span class='texttt'>forward_<span class='shy'></span>list</span><a class='hidden_link' href='#forward.list.modifiers-35.sentence-1'>.</a></div></div></div></div><div class='para' id='forward.list.modifiers-36'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.modifiers-36'>36</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7575'>#</a></div><div class='texpara'><div id='forward.list.modifiers-36.sentence-1' class='sentence'><i >Effects</i>: If <span class='texttt'>sz <span class='anglebracket'>&lt;</span> distance<span class='parenthesis'>(</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, end<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span>, erases the last <span class='texttt'>distance<span class='parenthesis'>(</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
end<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>-</span> sz</span> elements from the list<a class='hidden_link' href='#forward.list.modifiers-36.sentence-1'>.</a></div> <div id='forward.list.modifiers-36.sentence-2' class='sentence'>Otherwise, inserts <span class='texttt'>sz <span class='operator'>-</span> distance<span class='parenthesis'>(</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, end<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span>
copies of <span class='texttt'>c</span> at the end of the list<a class='hidden_link' href='#forward.list.modifiers-36.sentence-2'>.</a></div></div></div></div><div class='texpara'><div id='lib:forward_list,clear_'><div id='lib:clear,forward_list'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:clear,forward_list'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>void</span> clear<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
</code></div></div></div></div><div class='para' id='forward.list.modifiers-37'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.modifiers-37'>37</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7589'>#</a></div><div class='texpara'><div id='forward.list.modifiers-37.sentence-1' class='sentence'><i >Effects</i>: Erases all elements in the range [<span class='texttt'>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, end<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>)<a class='hidden_link' href='#forward.list.modifiers-37.sentence-1'>.</a></div></div></div></div><div class='para' id='forward.list.modifiers-38'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.modifiers-38'>38</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7593'>#</a></div><div class='texpara'><div id='forward.list.modifiers-38.sentence-1' class='sentence'><i >Remarks</i>: Does not invalidate past-the-end iterators<a class='hidden_link' href='#forward.list.modifiers-38.sentence-1'>.</a></div></div></div></div></div><div id='forward.list.ops' class='section'><h4 ><a class='secnum' href='#forward.list.ops' style='min-width:95pt'>24.3.10.6</a> Operations <a class='abbr_ref' href='forward.list.ops'>[forward.list.ops]</a></h4><div class='para' id='forward.list.ops-1'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.ops-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7600'>#</a></div><div class='texpara'><div id='forward.list.ops-1.sentence-1' class='sentence'>In this subclause,
arguments for a template parameter
named <span class='texttt'>Predicate</span> or <span class='texttt'>BinaryPredicate</span>
shall meet the corresponding requirements in <a href='algorithms.requirements' title='27.2&emsp;Algorithms requirements'>[algorithms.<span class='shy'></span>requirements]</a><a class='hidden_link' href='#forward.list.ops-1.sentence-1'>.</a></div> <div id='forward.list.ops-1.sentence-2' class='sentence'>The semantics of <span class='texttt'>i <span class='operator'>+</span> n</span>,
where <span class='texttt'>i</span> is an iterator into the list and <span class='texttt'>n</span> is an integer,
are the same as those of <span class='texttt'>next<span class='parenthesis'>(</span>i, n<span class='parenthesis'>)</span></span><a class='hidden_link' href='#forward.list.ops-1.sentence-2'>.</a></div> <div id='forward.list.ops-1.sentence-3' class='sentence'>The expression <span class='texttt'>i <span class='operator'>-</span> n</span>,
where <span class='texttt'>i</span> is an iterator into the list and <span class='texttt'>n</span> is an integer,
means an iterator <span class='texttt'>j</span> such that <span class='texttt'>j <span class='operator'>+</span> n <span class='operator'>=</span><span class='operator'>=</span> i</span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#forward.list.ops-1.sentence-3'>.</a></div> <div id='forward.list.ops-1.sentence-4' class='sentence'>For <span class='texttt'>merge</span> and <span class='texttt'>sort</span>,
the definitions and requirements in <a href='alg.sorting' title='27.8&emsp;Sorting and related operations'>[alg.<span class='shy'></span>sorting]</a> apply<a class='hidden_link' href='#forward.list.ops-1.sentence-4'>.</a></div></div></div><div class='texpara'><div id='lib:forward_list,splice_after'><div id='lib:splice_after,forward_list'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:splice_after,forward_list'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>void</span> splice_after<span class='parenthesis'>(</span>const_iterator position, forward_list<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
<span class='keyword'><span class="keyword added">constexpr</span> void</span> splice_after<span class='parenthesis'>(</span>const_iterator position, forward_list<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='forward.list.ops-2'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.ops-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7621'>#</a></div><div class='texpara'><div id='forward.list.ops-2.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>position</span> is <span class='texttt'>before_<span class='shy'></span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> or is a dereferenceable
iterator in the range [<span class='texttt'>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, end<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>)<a class='hidden_link' href='#forward.list.ops-2.sentence-1'>.</a></div> <div id='forward.list.ops-2.sentence-2' class='sentence'><span class='texttt'>get_<span class='shy'></span>allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> x<span class='operator'>.</span>get_<span class='shy'></span>allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#forward.list.ops-2.sentence-2'>.</a></div> <div id='forward.list.ops-2.sentence-3' class='sentence'><span class='texttt'>addressof<span class='parenthesis'>(</span>x<span class='parenthesis'>)</span> <span class='operator'>!</span><span class='operator'>=</span> <span class='keyword'>this</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#forward.list.ops-2.sentence-3'>.</a></div></div></div></div><div class='para' id='forward.list.ops-3'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.ops-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7628'>#</a></div><div class='texpara'><div id='forward.list.ops-3.sentence-1' class='sentence'><i >Effects</i>: Inserts the contents of <span class='texttt'>x</span> after
<span class='texttt'>position</span>, and <span class='texttt'>x</span> becomes empty<a class='hidden_link' href='#forward.list.ops-3.sentence-1'>.</a></div> <div id='forward.list.ops-3.sentence-2' class='sentence'>Pointers and references to the moved
elements of <span class='texttt'>x</span> now refer to those same elements but as members of <span class='texttt'><span class='operator'>*</span><span class='keyword'>this</span></span><a class='hidden_link' href='#forward.list.ops-3.sentence-2'>.</a></div> <div id='forward.list.ops-3.sentence-3' class='sentence'>Iterators referring to the moved elements will continue to refer to their elements, but
they now behave as iterators into <span class='texttt'><span class='operator'>*</span><span class='keyword'>this</span></span>, not into <span class='texttt'>x</span><a class='hidden_link' href='#forward.list.ops-3.sentence-3'>.</a></div></div></div></div><div class='para' id='forward.list.ops-4'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.ops-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7636'>#</a></div><div class='texpara'><div id='forward.list.ops-4.sentence-1' class='sentence'><i >Throws</i>: Nothing<a class='hidden_link' href='#forward.list.ops-4.sentence-1'>.</a></div></div></div></div><div class='para' id='forward.list.ops-5'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.ops-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7640'>#</a></div><div class='texpara'><div id='forward.list.ops-5.sentence-1' class='sentence'><i >Complexity</i>: <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-script-R" style="padding-top: 0.519em; padding-bottom: 0.225em; padding-right: 0.067em;">O</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char" style="padding-top: 0.519em; padding-bottom: 0.225em;"><span class="mjx-charbox MJXc-TeX-type-R" style="padding-bottom: 0.233em; margin-right: 0.275em;">distance<span class='parenthesis'>(</span>x<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, </span><span class="mjx-charbox MJXc-TeX-type-R" style="padding-bottom: 0.233em;">x<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span></span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span></span></span></span></span></div></div></div></div><div class='texpara'><div id='lib:forward_list,splice_after_'><div id='lib:splice_after,forward_list_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:splice_after,forward_list_'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>void</span> splice_after<span class='parenthesis'>(</span>const_iterator position, forward_list<span class='operator'>&amp;</span> x, const_iterator i<span class='parenthesis'>)</span>;
<span class='keyword'><span class="keyword added">constexpr</span> void</span> splice_after<span class='parenthesis'>(</span>const_iterator position, forward_list<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x, const_iterator i<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='forward.list.ops-6'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.ops-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7652'>#</a></div><div class='texpara'><div id='forward.list.ops-6.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>position</span> is <span class='texttt'>before_<span class='shy'></span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> or is a dereferenceable
iterator in the range [<span class='texttt'>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, end<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>)<a class='hidden_link' href='#forward.list.ops-6.sentence-1'>.</a></div> <div id='forward.list.ops-6.sentence-2' class='sentence'>The iterator following <span class='texttt'>i</span> is a dereferenceable iterator in <span class='texttt'>x</span><a class='hidden_link' href='#forward.list.ops-6.sentence-2'>.</a></div> <div id='forward.list.ops-6.sentence-3' class='sentence'><span class='texttt'>get_<span class='shy'></span>allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> x<span class='operator'>.</span>get_<span class='shy'></span>allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#forward.list.ops-6.sentence-3'>.</a></div></div></div></div><div class='para' id='forward.list.ops-7'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.ops-7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7659'>#</a></div><div class='texpara'><div id='forward.list.ops-7.sentence-1' class='sentence'><i >Effects</i>: Inserts the element following <span class='texttt'>i</span> into <span class='texttt'><span class='operator'>*</span><span class='keyword'>this</span></span>, following
<span class='texttt'>position</span>, and removes it from <span class='texttt'>x</span><a class='hidden_link' href='#forward.list.ops-7.sentence-1'>.</a></div> <div id='forward.list.ops-7.sentence-2' class='sentence'>The result is unchanged if <span class='texttt'>position <span class='operator'>=</span><span class='operator'>=</span> i</span> or <span class='texttt'>position <span class='operator'>=</span><span class='operator'>=</span> <span class='operator'>+</span><span class='operator'>+</span>i</span><a class='hidden_link' href='#forward.list.ops-7.sentence-2'>.</a></div> <div id='forward.list.ops-7.sentence-3' class='sentence'>Pointers
and references to <span class='texttt'><span class='operator'>*</span><span class='operator'>+</span><span class='operator'>+</span>i</span> continue to refer to the same element but as a member of
<span class='texttt'><span class='operator'>*</span><span class='keyword'>this</span></span><a class='hidden_link' href='#forward.list.ops-7.sentence-3'>.</a></div> <div id='forward.list.ops-7.sentence-4' class='sentence'>Iterators to <span class='texttt'><span class='operator'>*</span><span class='operator'>+</span><span class='operator'>+</span>i</span> continue to refer to
the same element, but now behave as iterators into <span class='texttt'><span class='operator'>*</span><span class='keyword'>this</span></span>, not into <span class='texttt'>x</span><a class='hidden_link' href='#forward.list.ops-7.sentence-4'>.</a></div></div></div></div><div class='para' id='forward.list.ops-8'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.ops-8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7668'>#</a></div><div class='texpara'><div id='forward.list.ops-8.sentence-1' class='sentence'><i >Throws</i>: Nothing<a class='hidden_link' href='#forward.list.ops-8.sentence-1'>.</a></div></div></div></div><div class='para' id='forward.list.ops-9'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.ops-9'>9</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7672'>#</a></div><div class='texpara'><div id='forward.list.ops-9.sentence-1' class='sentence'><i >Complexity</i>: <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-script-R" style="padding-top: 0.519em; padding-bottom: 0.225em; padding-right: 0.067em;">O</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span></span></span></span></span></div></div></div></div><div class='texpara'><div id='lib:forward_list,splice_after__'><div id='lib:splice_after,forward_list__'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:splice_after,forward_list__'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>void</span> splice_after<span class='parenthesis'>(</span>const_iterator position, forward_list<span class='operator'>&amp;</span> x,
                  const_iterator first, const_iterator last<span class='parenthesis'>)</span>;
<span class="keyword added">constexpr</span> <span class='keyword'>void</span> splice_after<span class='parenthesis'>(</span>const_iterator position, forward_list<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x,
                  const_iterator first, const_iterator last<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='forward.list.ops-10'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.ops-10'>10</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7686'>#</a></div><div class='texpara'><div id='forward.list.ops-10.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>position</span> is <span class='texttt'>before_<span class='shy'></span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> or is a
dereferenceable iterator in the range [<span class='texttt'>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, end<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>)<a class='hidden_link' href='#forward.list.ops-10.sentence-1'>.</a></div> <div id='forward.list.ops-10.sentence-2' class='sentence'>(<span class='texttt'>first, last</span>) is a
valid range in <span class='texttt'>x</span>, and all iterators in the range (<span class='texttt'>first, last</span>) are
dereferenceable<a class='hidden_link' href='#forward.list.ops-10.sentence-2'>.</a></div> <div id='forward.list.ops-10.sentence-3' class='sentence'><span class='texttt'>position</span> is not an iterator in the range (<span class='texttt'>first, last</span>)<a class='hidden_link' href='#forward.list.ops-10.sentence-3'>.</a></div> <div id='forward.list.ops-10.sentence-4' class='sentence'><span class='texttt'>get_<span class='shy'></span>allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> x<span class='operator'>.</span>get_<span class='shy'></span>allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#forward.list.ops-10.sentence-4'>.</a></div></div></div></div><div class='para' id='forward.list.ops-11'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.ops-11'>11</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7694'>#</a></div><div class='texpara'><div id='forward.list.ops-11.sentence-1' class='sentence'><i >Effects</i>: Inserts elements in the range (<span class='texttt'>first, last</span>) after <span class='texttt'>position</span> and
removes the elements from <span class='texttt'>x</span><a class='hidden_link' href='#forward.list.ops-11.sentence-1'>.</a></div> <div id='forward.list.ops-11.sentence-2' class='sentence'>Pointers and references to the moved elements of
<span class='texttt'>x</span> now refer to those same elements but as members of <span class='texttt'><span class='operator'>*</span><span class='keyword'>this</span></span><a class='hidden_link' href='#forward.list.ops-11.sentence-2'>.</a></div> <div id='forward.list.ops-11.sentence-3' class='sentence'>Iterators
referring to the moved elements will continue to refer to their elements, but they now
behave as iterators into <span class='texttt'><span class='operator'>*</span><span class='keyword'>this</span></span>, not into <span class='texttt'>x</span><a class='hidden_link' href='#forward.list.ops-11.sentence-3'>.</a></div></div></div></div><div class='para' id='forward.list.ops-12'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.ops-12'>12</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7702'>#</a></div><div class='texpara'><div id='forward.list.ops-12.sentence-1' class='sentence'><i >Complexity</i>: <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-script-R" style="padding-top: 0.519em; padding-bottom: 0.225em; padding-right: 0.067em;">O</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char" style="padding-top: 0.519em; padding-bottom: 0.151em;"><span class="mjx-charbox MJXc-TeX-type-R" style="padding-bottom: 0.233em; margin-right: 0.275em;">distance<span class='parenthesis'>(</span>first, </span><span class="mjx-charbox MJXc-TeX-type-R" style="padding-bottom: 0.233em;">last<span class='parenthesis'>)</span></span></span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span></span></span></span></span></div></div></div></div><div class='texpara'><div id='lib:forward_list,remove_if'><div id='lib:remove_if,forward_list'><div id='lib:forward_list,remove'><div id='lib:remove,forward_list'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:remove,forward_list'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> size_type remove<span class='parenthesis'>(</span><span class='keyword'>const</span> T<span class='operator'>&amp;</span> value<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Predicate<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> size_type remove_if<span class='parenthesis'>(</span>Predicate pred<span class='parenthesis'>)</span>;
</code></div></div></div></div></div></div><div class='para' id='forward.list.ops-13'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.ops-13'>13</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7715'>#</a></div><div class='texpara'><div id='forward.list.ops-13.sentence-1' class='sentence'><i >Effects</i>: Erases all the elements in the list referred to by a list iterator <span class='texttt'>i</span> for
which the following conditions hold: <span class='texttt'><span class='operator'>*</span>i <span class='operator'>=</span><span class='operator'>=</span> value</span> (for <span class='texttt'>remove<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>),
<span class='texttt'>pred<span class='parenthesis'>(</span><span class='operator'>*</span>i<span class='parenthesis'>)</span></span> is <span class='texttt'><span class='literal'>true</span></span> (for <span class='texttt'>remove_<span class='shy'></span>if<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>)<a class='hidden_link' href='#forward.list.ops-13.sentence-1'>.</a></div> <div id='forward.list.ops-13.sentence-2' class='sentence'>Invalidates only the iterators and references to the erased elements<a class='hidden_link' href='#forward.list.ops-13.sentence-2'>.</a></div></div></div></div><div class='para' id='forward.list.ops-14'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.ops-14'>14</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7722'>#</a></div><div class='texpara'><div id='forward.list.ops-14.sentence-1' class='sentence'><i >Returns</i>: The number of elements erased<a class='hidden_link' href='#forward.list.ops-14.sentence-1'>.</a></div></div></div></div><div class='para' id='forward.list.ops-15'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.ops-15'>15</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7726'>#</a></div><div class='texpara'><div id='forward.list.ops-15.sentence-1' class='sentence'><i >Throws</i>: Nothing unless an exception is thrown by the equality comparison or the
predicate<a class='hidden_link' href='#forward.list.ops-15.sentence-1'>.</a></div></div></div></div><div class='para' id='forward.list.ops-16'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.ops-16'>16</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7731'>#</a></div><div class='texpara'><div id='forward.list.ops-16.sentence-1' class='sentence'><i >Complexity</i>: Exactly <span class='texttt'>distance<span class='parenthesis'>(</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, end<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span> applications of the corresponding
predicate<a class='hidden_link' href='#forward.list.ops-16.sentence-1'>.</a></div></div></div></div><div class='para' id='forward.list.ops-17'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.ops-17'>17</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7736'>#</a></div><div class='texpara'><div id='forward.list.ops-17.sentence-1' class='sentence'><i >Remarks</i>: <a href='algorithm.stable' title='16.4.6.8&emsp;Requirements for stable algorithms&emsp;[algorithm.stable]'>Stable</a><a class='hidden_link' href='#forward.list.ops-17.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:forward_list,unique'><div id='lib:unique,forward_list'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:unique,forward_list'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> size_type unique<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> BinaryPredicate<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> size_type unique<span class='parenthesis'>(</span>BinaryPredicate binary_pred<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='forward.list.ops-18'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.ops-18'>18</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7748'>#</a></div><div class='texpara'><div id='forward.list.ops-18.sentence-1' class='sentence'>Let <span class='texttt'>binary_<span class='shy'></span>pred</span> be <span class='texttt'>equal_<span class='shy'></span>to<span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span><span class='curlybracket'>{</span><span class='curlybracket'>}</span></span> for the first overload<a class='hidden_link' href='#forward.list.ops-18.sentence-1'>.</a></div></div></div></div><div class='para' id='forward.list.ops-19'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.ops-19'>19</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7751'>#</a></div><div class='texpara'><div id='forward.list.ops-19.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>binary_<span class='shy'></span>pred</span> is an equivalence relation<a class='hidden_link' href='#forward.list.ops-19.sentence-1'>.</a></div></div></div></div><div class='para' id='forward.list.ops-20'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.ops-20'>20</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7755'>#</a></div><div class='texpara'><div id='forward.list.ops-20.sentence-1' class='sentence'><i >Effects</i>: Erases all but the first element from every consecutive
group of equivalent elements<a class='hidden_link' href='#forward.list.ops-20.sentence-1'>.</a></div> <div id='forward.list.ops-20.sentence-2' class='sentence'>That is, for a nonempty list, erases all elements referred to
by the iterator <span class='texttt'>i</span> in the range [<span class='texttt'>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>+</span> <span class='literal'>1</span>, end<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>)
for which <span class='texttt'>binary_<span class='shy'></span>pred<span class='parenthesis'>(</span><span class='operator'>*</span>i, <span class='operator'>*</span><span class='parenthesis'>(</span>i <span class='operator'>-</span> <span class='literal'>1</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#forward.list.ops-20.sentence-2'>.</a></div> <div id='forward.list.ops-20.sentence-3' class='sentence'>Invalidates only the iterators and references to the erased elements<a class='hidden_link' href='#forward.list.ops-20.sentence-3'>.</a></div></div></div></div><div class='para' id='forward.list.ops-21'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.ops-21'>21</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7764'>#</a></div><div class='texpara'><div id='forward.list.ops-21.sentence-1' class='sentence'><i >Returns</i>: The number of elements erased<a class='hidden_link' href='#forward.list.ops-21.sentence-1'>.</a></div></div></div></div><div class='para' id='forward.list.ops-22'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.ops-22'>22</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7768'>#</a></div><div class='texpara'><div id='forward.list.ops-22.sentence-1' class='sentence'><i >Throws</i>: Nothing unless an exception is thrown by the predicate<a class='hidden_link' href='#forward.list.ops-22.sentence-1'>.</a></div></div></div></div><div class='para' id='forward.list.ops-23'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.ops-23'>23</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7772'>#</a></div><div class='texpara'><div id='forward.list.ops-23.sentence-1' class='sentence'><i >Complexity</i>: If <span class='texttt'>empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> is <span class='texttt'><span class='literal'>false</span></span>,
exactly <span class='texttt'>distance<span class='parenthesis'>(</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, end<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>-</span> <span class='literal'>1</span></span> applications of
the corresponding predicate,
otherwise no applications of the predicate<a class='hidden_link' href='#forward.list.ops-23.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:forward_list,merge'><div id='lib:merge,forward_list'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:merge,forward_list'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>forward_list<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
<span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>forward_list<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Compare<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>forward_list<span class='operator'>&amp;</span> x, Compare comp<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Compare<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>forward_list<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x, Compare comp<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='forward.list.ops-24'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.ops-24'>24</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7789'>#</a></div><div class='texpara'><div id='forward.list.ops-24.sentence-1' class='sentence'>Let <span class='texttt'>comp</span> be <span class='texttt'>less<span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span></span> for the first two overloads<a class='hidden_link' href='#forward.list.ops-24.sentence-1'>.</a></div></div></div></div><div class='para' id='forward.list.ops-25'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.ops-25'>25</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7792'>#</a></div><div class='texpara'><div id='forward.list.ops-25.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'><span class='operator'>*</span><span class='keyword'>this</span></span> and <span class='texttt'>x</span> are both sorted
with respect to the comparator <span class='texttt'>comp</span>, and
<span class='texttt'>get_<span class='shy'></span>allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> x<span class='operator'>.</span>get_<span class='shy'></span>allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#forward.list.ops-25.sentence-1'>.</a></div></div></div></div><div class='para' id='forward.list.ops-26'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.ops-26'>26</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7798'>#</a></div><div class='texpara'><div id='forward.list.ops-26.sentence-1' class='sentence'><i >Effects</i>: If <span class='texttt'>addressof<span class='parenthesis'>(</span>x<span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> <span class='keyword'>this</span></span>, there are no effects<a class='hidden_link' href='#forward.list.ops-26.sentence-1'>.</a></div> <div id='forward.list.ops-26.sentence-2' class='sentence'>Otherwise, merges
the two sorted ranges [<span class='texttt'>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, end<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>) and [<span class='texttt'>x<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, x<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>)<a class='hidden_link' href='#forward.list.ops-26.sentence-2'>.</a></div> <div id='forward.list.ops-26.sentence-3' class='sentence'>The result is a range
that is sorted with respect to the comparator <span class='texttt'>comp</span><a class='hidden_link' href='#forward.list.ops-26.sentence-3'>.</a></div> <div id='forward.list.ops-26.sentence-4' class='sentence'>Pointers and references to the moved elements of <span class='texttt'>x</span> now refer to those same elements
but as members of <span class='texttt'><span class='operator'>*</span><span class='keyword'>this</span></span><a class='hidden_link' href='#forward.list.ops-26.sentence-4'>.</a></div> <div id='forward.list.ops-26.sentence-5' class='sentence'>Iterators referring to the moved elements will continue to
refer to their elements, but they now behave as iterators into <span class='texttt'><span class='operator'>*</span><span class='keyword'>this</span></span>, not into
<span class='texttt'>x</span><a class='hidden_link' href='#forward.list.ops-26.sentence-5'>.</a></div></div></div></div><div class='para' id='forward.list.ops-27'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.ops-27'>27</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7810'>#</a></div><div class='texpara'><div id='forward.list.ops-27.sentence-1' class='sentence'><i >Complexity</i>: At most <span class='texttt'>distance<span class='parenthesis'>(</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
end<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>+</span> distance<span class='parenthesis'>(</span>x<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, x<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>-</span> <span class='literal'>1</span></span> comparisons
if <span class='texttt'>addressof<span class='parenthesis'>(</span>x<span class='parenthesis'>)</span> <span class='operator'>!</span><span class='operator'>=</span> <span class='keyword'>this</span></span>; otherwise, no comparisons are performed<a class='hidden_link' href='#forward.list.ops-27.sentence-1'>.</a></div></div></div></div><div class='para' id='forward.list.ops-28'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.ops-28'>28</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7816'>#</a></div><div class='texpara'><div id='forward.list.ops-28.sentence-1' class='sentence'><i >Remarks</i>: Stable (<a href='algorithm.stable' title='16.4.6.8&emsp;Requirements for stable algorithms'>[algorithm.<span class='shy'></span>stable]</a>)<a class='hidden_link' href='#forward.list.ops-28.sentence-1'>.</a></div> <div id='forward.list.ops-28.sentence-2' class='sentence'>If <span class='texttt'>addressof<span class='parenthesis'>(</span>x<span class='parenthesis'>)</span> <span class='operator'>!</span><span class='operator'>=</span> <span class='keyword'>this</span></span>, <span class='texttt'>x</span> is empty after the merge<a class='hidden_link' href='#forward.list.ops-28.sentence-2'>.</a></div> <div id='forward.list.ops-28.sentence-3' class='sentence'>No elements are copied by this operation<a class='hidden_link' href='#forward.list.ops-28.sentence-3'>.</a></div> <div id='forward.list.ops-28.sentence-4' class='sentence'>If an exception is thrown other than by a comparison, there are no effects<a class='hidden_link' href='#forward.list.ops-28.sentence-4'>.</a></div></div></div></div><div class='texpara'><div id='lib:forward_list,sort'><div id='lib:sort,forward_list'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:sort,forward_list'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>void</span> sort<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Compare<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> <span class='keyword'>void</span> sort<span class='parenthesis'>(</span>Compare comp<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='forward.list.ops-29'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.ops-29'>29</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7831'>#</a></div><div class='texpara'><div id='forward.list.ops-29.sentence-1' class='sentence'><i >Effects</i>: Sorts the list according to the <span class='texttt'><span class='keyword'>operator</span><span class='anglebracket'>&lt;</span></span> or the <span class='texttt'>comp</span> function object<a class='hidden_link' href='#forward.list.ops-29.sentence-1'>.</a></div> <div id='forward.list.ops-29.sentence-2' class='sentence'>If an exception is thrown, the order of the elements in <span class='texttt'><span class='operator'>*</span><span class='keyword'>this</span></span> is unspecified<a class='hidden_link' href='#forward.list.ops-29.sentence-2'>.</a></div> <div id='forward.list.ops-29.sentence-3' class='sentence'>Does not affect the validity of iterators and references<a class='hidden_link' href='#forward.list.ops-29.sentence-3'>.</a></div></div></div></div><div class='para' id='forward.list.ops-30'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.ops-30'>30</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7837'>#</a></div><div class='texpara'><div id='forward.list.ops-30.sentence-1' class='sentence'><i >Complexity</i>: Approximately <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.085em;">N</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">log</span></span><span class="mjx-mo"><span class="mjx-char"></span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.085em;">N</span></span></span></span></span></span> comparisons, where <span class='math'><span class='mathalpha'>N</span></span> is <span class='texttt'>distance<span class='parenthesis'>(</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, end<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#forward.list.ops-30.sentence-1'>.</a></div></div></div></div><div class='para' id='forward.list.ops-31'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.ops-31'>31</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7841'>#</a></div><div class='texpara'><div id='forward.list.ops-31.sentence-1' class='sentence'><i >Remarks</i>: <a href='algorithm.stable' title='16.4.6.8&emsp;Requirements for stable algorithms&emsp;[algorithm.stable]'>Stable</a><a class='hidden_link' href='#forward.list.ops-31.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:forward_list,reverse'><div id='lib:reverse,forward_list'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:reverse,forward_list'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>void</span> reverse<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
</code></div></div></div></div><div class='para' id='forward.list.ops-32'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.ops-32'>32</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7852'>#</a></div><div class='texpara'><div id='forward.list.ops-32.sentence-1' class='sentence'><i >Effects</i>: Reverses the order of the elements in the list<a class='hidden_link' href='#forward.list.ops-32.sentence-1'>.</a></div> <div id='forward.list.ops-32.sentence-2' class='sentence'>Does not affect the validity of iterators and references<a class='hidden_link' href='#forward.list.ops-32.sentence-2'>.</a></div></div></div></div><div class='para' id='forward.list.ops-33'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.ops-33'>33</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7857'>#</a></div><div class='texpara'><div id='forward.list.ops-33.sentence-1' class='sentence'><i >Complexity</i>: Linear time<a class='hidden_link' href='#forward.list.ops-33.sentence-1'>.</a></div></div></div></div></div><div id='forward.list.erasure' class='section'><h4 ><a class='secnum' href='#forward.list.erasure' style='min-width:95pt'>24.3.10.7</a> Erasure <a class='abbr_ref' href='forward.list.erasure'>[forward.list.erasure]</a></h4><div class='texpara'><div id='lib:forward_list,erase_'><div id='lib:erase,forward_list'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:erase,forward_list'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Allocator, <span class='keyword'>class</span> U <span class='operator'>=</span> T<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>typename</span> forward_list<span class='anglebracket'>&lt;</span>T, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>size_type
    erase<span class='parenthesis'>(</span>forward_list<span class='anglebracket'>&lt;</span>T, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> c, <span class='keyword'>const</span> U<span class='operator'>&amp;</span> value<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='forward.list.erasure-1'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.erasure-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7872'>#</a></div><div class='texpara'><div id='forward.list.erasure-1.sentence-1' class='sentence'><i >Effects</i>: Equivalent to: <span class='texttt'><span class='keyword'>return</span> erase_<span class='shy'></span>if<span class='parenthesis'>(</span>c, <span class='squarebracket'>[</span><span class='operator'>&amp;</span><span class='squarebracket'>]</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='operator'>&amp;</span> elem<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='keyword'>return</span> elem <span class='operator'>=</span><span class='operator'>=</span> value; <span class='curlybracket'>}</span><span class='parenthesis'>)</span>;</span></div></div></div></div><div class='texpara'><div id='lib:forward_list,erase_if'><div id='lib:erase_if,forward_list'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:erase_if,forward_list'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Allocator, <span class='keyword'>class</span> Predicate<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>typename</span> forward_list<span class='anglebracket'>&lt;</span>T, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>size_type
    erase_if<span class='parenthesis'>(</span>forward_list<span class='anglebracket'>&lt;</span>T, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> c, Predicate pred<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='forward.list.erasure-2'><div class='marginalizedparent'><a class='marginalized' href='#forward.list.erasure-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7885'>#</a></div><div class='texpara'><div id='forward.list.erasure-2.sentence-1' class='sentence'><i >Effects</i>: Equivalent to: <span class='texttt'><span class='keyword'>return</span> c<span class='operator'>.</span>remove_<span class='shy'></span>if<span class='parenthesis'>(</span>pred<span class='parenthesis'>)</span>;</span></div></div></div></div></div></div><div id='list' class='section'><h3 ><a class='secnum' href='#list' style='min-width:80pt'>24.3.11</a> Class template <span class='texttt'>list</span> <a class='abbr_ref' href='list'>[list]</a></h3><div id='list.overview' class='section'><h4 ><a class='secnum' href='#list.overview' style='min-width:95pt'>24.3.11.1</a> Overview <a class='abbr_ref' href='list.overview'>[list.overview]</a></h4><div class='para' id='list.overview-1'><div class='marginalizedparent'><a class='marginalized' href='#list.overview-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7894'>#</a></div><div class='texpara'><div id='list.overview-1.sentence-1' class='sentence'><a class='index' id='lib:list'></a>A
<span class='texttt'>list</span>
is a sequence container that supports
bidirectional iterators and allows constant time insert and erase
operations anywhere within the sequence, with storage management handled
automatically<a class='hidden_link' href='#list.overview-1.sentence-1'>.</a></div> <div id='list.overview-1.sentence-2' class='sentence'>Unlike <a href='#vector' title='24.3.12&emsp;Class template vector&emsp;[vector]'>vectors</a> and <a href='#deque' title='24.3.9&emsp;Class template deque&emsp;[deque]'>deques</a>,
fast random access to list elements is not supported, but many
algorithms only need sequential access anyway<a class='hidden_link' href='#list.overview-1.sentence-2'>.</a></div></div></div><div class='para' id='list.overview-2'><div class='marginalizedparent'><a class='marginalized' href='#list.overview-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L7905'>#</a></div><div class='texpara'><div id='list.overview-2.sentence-1' class='sentence'>A <span class='texttt'>list</span> meets all of the requirements
of a container (<a href='#container.reqmts' title='24.2.2.2&emsp;Container requirements'>[container.<span class='shy'></span>reqmts]</a>),
of a reversible container (<a href='#container.rev.reqmts' title='24.2.2.3&emsp;Reversible container requirements'>[container.<span class='shy'></span>rev.<span class='shy'></span>reqmts]</a>),
of an allocator-aware container (<a href='#container.alloc.reqmts' title='24.2.2.5&emsp;Allocator-aware containers'>[container.<span class='shy'></span>alloc.<span class='shy'></span>reqmts]</a>), and
of a sequence container,
including most of the optional sequence container
requirements (<a href='#sequence.reqmts' title='24.2.4&emsp;Sequence containers'>[sequence.<span class='shy'></span>reqmts]</a>)<a class='hidden_link' href='#list.overview-2.sentence-1'>.</a></div> <div id='list.overview-2.sentence-2' class='sentence'>The exceptions are the
<span class='texttt'><span class='keyword'>operator</span><span class='squarebracket'>[</span><span class='squarebracket'>]</span></span>
and
<span class='texttt'>at</span>
member functions, which are not provided<a class='hidden_link' href='#list.overview-2.sentence-2'>.</a><a class='footnoteref' href='#footnote-204' id='footnoteref-204' title='These member functions are only provided by containers whose iterators are random access iterators.'>204</a></div> <div id='list.overview-2.sentence-3' class='sentence'>
Descriptions are provided here only for operations on
<span class='texttt'>list</span>
that are not described in one of these tables
or for operations where there is additional semantic information<a class='hidden_link' href='#list.overview-2.sentence-3'>.</a></div></div>

<div class='para added' id='list.overview-3'><div class='marginalizedparent'><a class='marginalized' href='#list.overview-3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href=''>#</a></div>
<div class='texpara'>The types <span class="texttt">iterator</span> and <span class="texttt">const_iterator</span> meet the constexpr iterator requirements (<a href="iterator.requirements.general" title="25.3.1 General">[iterator.<span class="shy"></span>requirements.<span class="shy"></span>general]</a>).</div></div>


<div class='texpara'><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> list <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> value_type             <span class='operator'>=</span> T;
    <span class='keyword'>using</span> allocator_type         <span class='operator'>=</span> Allocator;
    <span class='keyword'>using</span> pointer                <span class='operator'>=</span> <span class='keyword'>typename</span> allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>pointer;
    <span class='keyword'>using</span> const_pointer          <span class='operator'>=</span> <span class='keyword'>typename</span> allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>const_pointer;
    <span class='keyword'>using</span> reference              <span class='operator'>=</span> value_type<span class='operator'>&amp;</span>;
    <span class='keyword'>using</span> const_reference        <span class='operator'>=</span> <span class='keyword'>const</span> value_type<span class='operator'>&amp;</span>;
    <span class='keyword'>using</span> size_type              <span class='operator'>=</span> <a class='index' id=':type_of_list::size_type'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> difference_type        <span class='operator'>=</span> <a class='index' id=':type_of_list::difference_type'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> iterator               <span class='operator'>=</span> <a class='index' id=':type_of_list::iterator'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> const_iterator         <span class='operator'>=</span> <a class='index' id=':type_of_list::const_iterator'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> reverse_iterator       <span class='operator'>=</span> std<span class='operator'>::</span>reverse_iterator<span class='anglebracket'>&lt;</span>iterator<span class='anglebracket'>&gt;</span>;
    <span class='keyword'>using</span> const_reverse_iterator <span class='operator'>=</span> std<span class='operator'>::</span>reverse_iterator<span class='anglebracket'>&lt;</span>const_iterator<span class='anglebracket'>&gt;</span>;

    <span class='comment'>// <a href='#list.cons' title='24.3.11.2&emsp;Constructors, copy, and assignment'>[list.<span class='shy'></span>cons]</a>, construct/copy/destroy</span>
    <span class="keyword added">constexpr</span> list<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>:</span> list<span class='parenthesis'>(</span>Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> list<span class='parenthesis'>(</span><span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> list<span class='parenthesis'>(</span>size_type n, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> list<span class='parenthesis'>(</span>size_type n, <span class='keyword'>const</span> T<span class='operator'>&amp;</span> value, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> list<span class='parenthesis'>(</span>InputIterator first, InputIterator last, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range___________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> list<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> list<span class='parenthesis'>(</span><span class='keyword'>const</span> list<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> list<span class='parenthesis'>(</span>list<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> list<span class='parenthesis'>(</span><span class='keyword'>const</span> list<span class='operator'>&amp;</span>, <span class='keyword'>const</span> type_identity_t<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> list<span class='parenthesis'>(</span>list<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, <span class='keyword'>const</span> type_identity_t<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> list<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='operator'>~</span>list<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> list<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> list<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> list<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span>list<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>
      <span class='keyword'>noexcept</span><span class='parenthesis'>(</span>allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>is_always_equal<span class='operator'>::</span>value<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> list<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> assign<span class='parenthesis'>(</span>InputIterator first, InputIterator last<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range____________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> assign_range<span class='parenthesis'>(</span>R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> assign<span class='parenthesis'>(</span>size_type n, <span class='keyword'>const</span> T<span class='operator'>&amp;</span> t<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> assign<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> allocator_type get_allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// iterators</span>
    <span class="keyword added">constexpr</span> iterator               begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator         begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> iterator               end<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator         end<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> reverse_iterator       rbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_reverse_iterator rbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> reverse_iterator       rend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_reverse_iterator rend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class="keyword added">constexpr</span> const_iterator         cbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator         cend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_reverse_iterator crbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_reverse_iterator crend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// <a href='#list.capacity' title='24.3.11.3&emsp;Capacity'>[list.<span class='shy'></span>capacity]</a>, capacity</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> size_type size<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> size_type max_size<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span>      resize<span class='parenthesis'>(</span>size_type sz<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span>      resize<span class='parenthesis'>(</span>size_type sz, <span class='keyword'>const</span> T<span class='operator'>&amp;</span> c<span class='parenthesis'>)</span>;

    <span class='comment'>// element access</span>
    <span class="keyword added">constexpr</span> reference       front<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> const_reference front<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> reference       back<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> const_reference back<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// <a href='#list.modifiers' title='24.3.11.4&emsp;Modifiers'>[list.<span class='shy'></span>modifiers]</a>, modifiers</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> reference emplace_front<span class='parenthesis'>(</span>Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> reference emplace_back<span class='parenthesis'>(</span>Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> push_front<span class='parenthesis'>(</span><span class='keyword'>const</span> T<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> push_front<span class='parenthesis'>(</span>T<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range_____________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> prepend_range<span class='parenthesis'>(</span>R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> pop_front<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> push_back<span class='parenthesis'>(</span><span class='keyword'>const</span> T<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> push_back<span class='parenthesis'>(</span>T<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range______________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> append_range<span class='parenthesis'>(</span>R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> pop_back<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;

    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span> iterator emplace<span class='parenthesis'>(</span>const_iterator position, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, <span class='keyword'>const</span> T<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, T<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, size_type n, <span class='keyword'>const</span> T<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, InputIterator first, InputIterator last<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range_______________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> iterator insert_range<span class='parenthesis'>(</span>const_iterator position, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, initializer_list<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> il<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> iterator erase<span class='parenthesis'>(</span>const_iterator position<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator erase<span class='parenthesis'>(</span>const_iterator position, const_iterator last<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span>     swap<span class='parenthesis'>(</span>list<span class='operator'>&amp;</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span><span class='parenthesis'>(</span>allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>is_always_equal<span class='operator'>::</span>value<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span>     clear<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// <a href='#list.ops' title='24.3.11.5&emsp;Operations'>[list.<span class='shy'></span>ops]</a>, list operations</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> splice<span class='parenthesis'>(</span>const_iterator position, list<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> splice<span class='parenthesis'>(</span>const_iterator position, list<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> splice<span class='parenthesis'>(</span>const_iterator position, list<span class='operator'>&amp;</span> x, const_iterator i<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> splice<span class='parenthesis'>(</span>const_iterator position, list<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x, const_iterator i<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> splice<span class='parenthesis'>(</span>const_iterator position, list<span class='operator'>&amp;</span> x, const_iterator first, const_iterator last<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> splice<span class='parenthesis'>(</span>const_iterator position, list<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x, const_iterator first, const_iterator last<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> size_type remove<span class='parenthesis'>(</span><span class='keyword'>const</span> T<span class='operator'>&amp;</span> value<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Predicate<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> size_type remove_if<span class='parenthesis'>(</span>Predicate pred<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> size_type unique<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> BinaryPredicate<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> size_type unique<span class='parenthesis'>(</span>BinaryPredicate binary_pred<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>list<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>list<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Compare<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>list<span class='operator'>&amp;</span> x, Compare comp<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Compare<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>list<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x, Compare comp<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> sort<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Compare<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> <span class='keyword'>void</span> sort<span class='parenthesis'>(</span>Compare comp<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> reverse<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
  <span class='curlybracket'>}</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    list<span class='parenthesis'>(</span>InputIterator, InputIterator, Allocator <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> list<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range___'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R, <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    list<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, Allocator <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> list<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>}</span>
</span></div></div><div class='para' id='list.overview-3'><div class='marginalizedparent'><a class='marginalized' href='#list.overview-3'><span class="removed">3</span><span class="added">4</span></a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8067'>#</a></div><div class='texpara'><div id='list.overview-3.sentence-1' class='sentence'>An incomplete type <span class='texttt'>T</span> may be used when instantiating <span class='texttt'>list</span>
if the allocator meets the
<a href='allocator.requirements.completeness' title='16.4.4.6.2&emsp;Allocator completeness requirements&emsp;[allocator.requirements.completeness]'>allocator completeness requirements</a><a class='hidden_link' href='#list.overview-3.sentence-1'>.</a></div> <div id='list.overview-3.sentence-2' class='sentence'><span class='texttt'>T</span> shall be complete before any member of the resulting specialization
of <span class='texttt'>list</span> is referenced<a class='hidden_link' href='#list.overview-3.sentence-2'>.</a></div></div></div><div class='footnoteSeparator'></div><div class='footnote' id='footnote-204'><div class='texpara'><a class='footnotenum' href='#footnote-204'>204)</a><a class='footnoteBacklink' href='#footnoteref-204'>204)</a> <div id='footnote-204.sentence-1' class='sentence'>These member functions
are only provided by containers whose iterators
are random access iterators<a class='hidden_link' href='#footnote-204.sentence-1'>.</a></div></div></div></div><div id='list.cons' class='section'><h4 ><a class='secnum' href='#list.cons' style='min-width:95pt'>24.3.11.2</a> Constructors, copy, and assignment <a class='abbr_ref' href='list.cons'>[list.cons]</a></h4><div class='texpara'><div id='lib:list,constructor'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:list,constructor'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> list<span class='parenthesis'>(</span><span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='list.cons-1'><div class='marginalizedparent'><a class='marginalized' href='#list.cons-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8082'>#</a></div><div class='texpara'><div id='list.cons-1.sentence-1' class='sentence'><i >Effects</i>: Constructs an empty list, using the specified allocator<a class='hidden_link' href='#list.cons-1.sentence-1'>.</a></div></div></div></div><div class='para' id='list.cons-2'><div class='marginalizedparent'><a class='marginalized' href='#list.cons-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8086'>#</a></div><div class='texpara'><div id='list.cons-2.sentence-1' class='sentence'><i >Complexity</i>: Constant<a class='hidden_link' href='#list.cons-2.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:list,constructor_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:list,constructor_'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> list<span class='parenthesis'>(</span>size_type n, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='list.cons-3'><div class='marginalizedparent'><a class='marginalized' href='#list.cons-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8097'>#</a></div><div class='texpara'><div id='list.cons-3.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>T</span> is <i >Cpp17DefaultInsertable</i> into <span class='texttt'>list</span><a class='hidden_link' href='#list.cons-3.sentence-1'>.</a></div></div></div></div><div class='para' id='list.cons-4'><div class='marginalizedparent'><a class='marginalized' href='#list.cons-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8101'>#</a></div><div class='texpara'><div id='list.cons-4.sentence-1' class='sentence'><i >Effects</i>: Constructs a <span class='texttt'>list</span> with
<span class='texttt'>n</span> default-inserted elements using the specified allocator<a class='hidden_link' href='#list.cons-4.sentence-1'>.</a></div></div></div></div><div class='para' id='list.cons-5'><div class='marginalizedparent'><a class='marginalized' href='#list.cons-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8106'>#</a></div><div class='texpara'><div id='list.cons-5.sentence-1' class='sentence'><i >Complexity</i>: Linear in
<span class='texttt'>n</span><a class='hidden_link' href='#list.cons-5.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:list,constructor__'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:list,constructor__'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> list<span class='parenthesis'>(</span>size_type n, <span class='keyword'>const</span> T<span class='operator'>&amp;</span> value, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='list.cons-6'><div class='marginalizedparent'><a class='marginalized' href='#list.cons-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8118'>#</a></div><div class='texpara'><div id='list.cons-6.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>T</span> is <i >Cpp17CopyInsertable</i> into <span class='texttt'>list</span><a class='hidden_link' href='#list.cons-6.sentence-1'>.</a></div></div></div></div><div class='para' id='list.cons-7'><div class='marginalizedparent'><a class='marginalized' href='#list.cons-7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8122'>#</a></div><div class='texpara'><div id='list.cons-7.sentence-1' class='sentence'><i >Effects</i>: Constructs a
<span class='texttt'>list</span>
with
<span class='texttt'>n</span>
copies of
<span class='texttt'>value</span>,
using the specified allocator<a class='hidden_link' href='#list.cons-7.sentence-1'>.</a></div></div></div></div><div class='para' id='list.cons-8'><div class='marginalizedparent'><a class='marginalized' href='#list.cons-8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8132'>#</a></div><div class='texpara'><div id='list.cons-8.sentence-1' class='sentence'><i >Complexity</i>: Linear in
<span class='texttt'>n</span><a class='hidden_link' href='#list.cons-8.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:list,constructor___'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:list,constructor___'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> list<span class='parenthesis'>(</span>InputIterator first, InputIterator last, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='list.cons-9'><div class='marginalizedparent'><a class='marginalized' href='#list.cons-9'>9</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8145'>#</a></div><div class='texpara'><div id='list.cons-9.sentence-1' class='sentence'><i >Effects</i>: Constructs a
<span class='texttt'>list</span>
equal to the range
[<span class='texttt'>first, last</span>)<a class='hidden_link' href='#list.cons-9.sentence-1'>.</a></div></div></div></div><div class='para' id='list.cons-10'><div class='marginalizedparent'><a class='marginalized' href='#list.cons-10'>10</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8152'>#</a></div><div class='texpara'><div id='list.cons-10.sentence-1' class='sentence'><i >Complexity</i>: Linear in
<span class='texttt'>distance<span class='parenthesis'>(</span>first, last<span class='parenthesis'>)</span></span><a class='hidden_link' href='#list.cons-10.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:list,constructor____'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:list,constructor____'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range________________________'><span class='texttt'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> list<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='list.cons-11'><div class='marginalizedparent'><a class='marginalized' href='#list.cons-11'>11</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8165'>#</a></div><div class='texpara'><div id='list.cons-11.sentence-1' class='sentence'><i >Effects</i>: Constructs a <span class='texttt'>list</span> object with the elements of the range <span class='texttt'>rg</span><a class='hidden_link' href='#list.cons-11.sentence-1'>.</a></div></div></div></div><div class='para' id='list.cons-12'><div class='marginalizedparent'><a class='marginalized' href='#list.cons-12'>12</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8169'>#</a></div><div class='texpara'><div id='list.cons-12.sentence-1' class='sentence'><i >Complexity</i>: Linear in <span class='texttt'>ranges<span class='operator'>&#x200b;::&#x200b;</span>distance<span class='parenthesis'>(</span>rg<span class='parenthesis'>)</span></span><a class='hidden_link' href='#list.cons-12.sentence-1'>.</a></div></div></div></div></div><div id='list.capacity' class='section'><h4 ><a class='secnum' href='#list.capacity' style='min-width:95pt'>24.3.11.3</a> Capacity <a class='abbr_ref' href='list.capacity'>[list.capacity]</a></h4><div class='texpara'><div id='lib:list,resize'><div id='lib:resize,list'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:resize,list'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>void</span> resize<span class='parenthesis'>(</span>size_type sz<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='list.capacity-1'><div class='marginalizedparent'><a class='marginalized' href='#list.capacity-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8182'>#</a></div><div class='texpara'><div id='list.capacity-1.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>T</span> is <i >Cpp17DefaultInsertable</i> into <span class='texttt'>list</span><a class='hidden_link' href='#list.capacity-1.sentence-1'>.</a></div></div></div></div><div class='para' id='list.capacity-2'><div class='marginalizedparent'><a class='marginalized' href='#list.capacity-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8186'>#</a></div><div class='texpara'><div id='list.capacity-2.sentence-1' class='sentence'><i >Effects</i>: If <span class='texttt'>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='anglebracket'>&lt;</span> sz</span>,
appends <span class='texttt'>sz <span class='operator'>-</span> size<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> default-inserted elements to the
sequence<a class='hidden_link' href='#list.capacity-2.sentence-1'>.</a></div> <div id='list.capacity-2.sentence-2' class='sentence'>If <span class='texttt'>sz <span class='anglebracket'>&lt;</span><span class='operator'>=</span> size<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>, equivalent to:
<span class='codeblock'>list<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='operator'>::</span>iterator it <span class='operator'>=</span> begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
advance<span class='parenthesis'>(</span>it, sz<span class='parenthesis'>)</span>;
erase<span class='parenthesis'>(</span>it, end<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</span></div></div></div></div><div class='texpara'><div id='lib:list,resize_'><div id='lib:resize,list_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:resize,list_'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>void</span> resize<span class='parenthesis'>(</span>size_type sz, <span class='keyword'>const</span> T<span class='operator'>&amp;</span> c<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='list.capacity-3'><div class='marginalizedparent'><a class='marginalized' href='#list.capacity-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8205'>#</a></div><div class='texpara'><div id='list.capacity-3.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>T</span> is <i >Cpp17CopyInsertable</i> into <span class='texttt'>list</span><a class='hidden_link' href='#list.capacity-3.sentence-1'>.</a></div></div></div></div><div class='para' id='list.capacity-4'><div class='marginalizedparent'><a class='marginalized' href='#list.capacity-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8209'>#</a></div><div class='texpara'><div id='list.capacity-4.sentence-1' class='sentence'><i >Effects</i>: As if by:
<span class='codeblock'><span class='keyword'>if</span> <span class='parenthesis'>(</span>sz <span class='anglebracket'>&gt;</span> size<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
  insert<span class='parenthesis'>(</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, sz<span class='operator'>-</span>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, c<span class='parenthesis'>)</span>;
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='parenthesis'>(</span>sz <span class='anglebracket'>&lt;</span> size<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
  iterator i <span class='operator'>=</span> begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
  advance<span class='parenthesis'>(</span>i, sz<span class='parenthesis'>)</span>;
  erase<span class='parenthesis'>(</span>i, end<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
<span class='curlybracket'>}</span>
<span class='keyword'>else</span>
  ;                 <span class='comment'>// do nothing</span>
</span></div></div></div></div></div><div id='list.modifiers' class='section'><h4 ><a class='secnum' href='#list.modifiers' style='min-width:95pt'>24.3.11.4</a> Modifiers <a class='abbr_ref' href='list.modifiers'>[list.modifiers]</a></h4><div class='texpara'><div id='lib:list,insert_'><div id='lib:insert,list'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:insert,list'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, <span class='keyword'>const</span> T<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
<span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, T<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
<span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, size_type n, <span class='keyword'>const</span> T<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, InputIterator first,
                  InputIterator last<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range_________________________'><span class='texttt'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> iterator insert_range<span class='parenthesis'>(</span>const_iterator position, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;
<span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, initializer_list<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;

<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> reference emplace_front<span class='parenthesis'>(</span>Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> reference emplace_back<span class='parenthesis'>(</span>Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator emplace<span class='parenthesis'>(</span>const_iterator position, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
<span class="keyword added">constexpr</span> <span class='keyword'>void</span> push_front<span class='parenthesis'>(</span><span class='keyword'>const</span> T<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
<span class="keyword added">constexpr</span> <span class='keyword'>void</span> push_front<span class='parenthesis'>(</span>T<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range__________________________'><span class='texttt'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>void</span> prepend_range<span class='parenthesis'>(</span>R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;
<span class="keyword added">constexpr</span> <span class='keyword'>void</span> push_back<span class='parenthesis'>(</span><span class='keyword'>const</span> T<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
<span class="keyword added">constexpr</span> <span class='keyword'>void</span> push_back<span class='parenthesis'>(</span>T<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range___________________________'><span class='texttt'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>void</span> append_range<span class='parenthesis'>(</span>R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='list.modifiers-1'><div class='marginalizedparent'><a class='marginalized' href='#list.modifiers-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8253'>#</a></div><div class='texpara'><div id='list.modifiers-1.sentence-1' class='sentence'><i >Complexity</i>: Insertion of a single element into a list takes constant time and
exactly one call to a constructor of
<span class='texttt'>T</span><a class='hidden_link' href='#list.modifiers-1.sentence-1'>.</a></div> <div id='list.modifiers-1.sentence-2' class='sentence'>Insertion of multiple elements into a list is linear in the
number of elements inserted, and the number of calls to the copy
constructor or move constructor of <span class='texttt'>T</span> is exactly equal
to the number of elements inserted<a class='hidden_link' href='#list.modifiers-1.sentence-2'>.</a></div></div></div></div><div class='para' id='list.modifiers-2'><div class='marginalizedparent'><a class='marginalized' href='#list.modifiers-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8262'>#</a></div><div class='texpara'><div id='list.modifiers-2.sentence-1' class='sentence'><i >Remarks</i>: Does not affect the validity of iterators and references<a class='hidden_link' href='#list.modifiers-2.sentence-1'>.</a></div> <div id='list.modifiers-2.sentence-2' class='sentence'>If an exception is thrown there are no effects<a class='hidden_link' href='#list.modifiers-2.sentence-2'>.</a></div></div></div></div><div class='texpara'><div id='lib:list,erase_'><div id='lib:erase,list'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:erase,list'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> iterator erase<span class='parenthesis'>(</span>const_iterator position<span class='parenthesis'>)</span>;
<span class="keyword added">constexpr</span> iterator erase<span class='parenthesis'>(</span>const_iterator first, const_iterator last<span class='parenthesis'>)</span>;

<span class="keyword added">constexpr</span> <span class='keyword'>void</span> pop_front<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
<span class="keyword added">constexpr</span> <span class='keyword'>void</span> pop_back<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
<span class="keyword added">constexpr</span> <span class='keyword'>void</span> clear<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
</code></div></div></div></div><div class='para' id='list.modifiers-3'><div class='marginalizedparent'><a class='marginalized' href='#list.modifiers-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8279'>#</a></div><div class='texpara'><div id='list.modifiers-3.sentence-1' class='sentence'><i >Effects</i>: Invalidates only the iterators and references to the erased elements<a class='hidden_link' href='#list.modifiers-3.sentence-1'>.</a></div></div></div></div><div class='para' id='list.modifiers-4'><div class='marginalizedparent'><a class='marginalized' href='#list.modifiers-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8283'>#</a></div><div class='texpara'><div id='list.modifiers-4.sentence-1' class='sentence'><i >Throws</i>: Nothing<a class='hidden_link' href='#list.modifiers-4.sentence-1'>.</a></div></div></div></div><div class='para' id='list.modifiers-5'><div class='marginalizedparent'><a class='marginalized' href='#list.modifiers-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8287'>#</a></div><div class='texpara'><div id='list.modifiers-5.sentence-1' class='sentence'><i >Complexity</i>: Erasing a single element is a constant time operation with a single call to the destructor of
<span class='texttt'>T</span><a class='hidden_link' href='#list.modifiers-5.sentence-1'>.</a></div> <div id='list.modifiers-5.sentence-2' class='sentence'>Erasing a range in a list is linear time in the
size of the range and the number of calls to the destructor of type
<span class='texttt'>T</span>
is exactly equal to the size of the range<a class='hidden_link' href='#list.modifiers-5.sentence-2'>.</a></div></div></div></div></div><div id='list.ops' class='section'><h4 ><a class='secnum' href='#list.ops' style='min-width:95pt'>24.3.11.5</a> Operations <a class='abbr_ref' href='list.ops'>[list.ops]</a></h4><div class='para' id='list.ops-1'><div class='marginalizedparent'><a class='marginalized' href='#list.ops-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8299'>#</a></div><div class='texpara'><div id='list.ops-1.sentence-1' class='sentence'>Since lists allow fast insertion and erasing from the middle of a list, certain
operations are provided specifically for them<a class='hidden_link' href='#list.ops-1.sentence-1'>.</a><a class='footnoteref' href='#footnote-205' id='footnoteref-205' title='As specified in [allocator.requirements], the requirements in this Clause apply only to lists whose allocators compare equal.'>205</a></div> <div id='list.ops-1.sentence-2' class='sentence'>
In this subclause,
arguments for a template parameter
named <span class='texttt'>Predicate</span> or <span class='texttt'>BinaryPredicate</span>
shall meet the corresponding requirements in <a href='algorithms.requirements' title='27.2&emsp;Algorithms requirements'>[algorithms.<span class='shy'></span>requirements]</a><a class='hidden_link' href='#list.ops-1.sentence-2'>.</a></div> <div id='list.ops-1.sentence-3' class='sentence'>The semantics of <span class='texttt'>i <span class='operator'>+</span> n</span> and <span class='texttt'>i <span class='operator'>-</span> n</span>,
where <span class='texttt'>i</span> is an iterator into the list and <span class='texttt'>n</span> is an integer,
are the same as those of <span class='texttt'>next<span class='parenthesis'>(</span>i, n<span class='parenthesis'>)</span></span> and <span class='texttt'>prev<span class='parenthesis'>(</span>i, n<span class='parenthesis'>)</span></span>,
respectively<a class='hidden_link' href='#list.ops-1.sentence-3'>.</a></div> <div id='list.ops-1.sentence-4' class='sentence'>For <span class='texttt'>merge</span> and <span class='texttt'>sort</span>,
the definitions and requirements in <a href='alg.sorting' title='27.8&emsp;Sorting and related operations'>[alg.<span class='shy'></span>sorting]</a> apply<a class='hidden_link' href='#list.ops-1.sentence-4'>.</a></div></div></div><div class='para' id='list.ops-2'><div class='marginalizedparent'><a class='marginalized' href='#list.ops-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8318'>#</a></div><div class='texpara'><div id='list.ops-2.sentence-1' class='sentence'><span class='texttt'>list</span> provides three splice operations that destructively move elements from one list to
another<a class='hidden_link' href='#list.ops-2.sentence-1'>.</a></div> <div id='list.ops-2.sentence-2' class='sentence'>The behavior of splice operations is undefined if <span class='texttt'>get_<span class='shy'></span>allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>!</span><span class='operator'>=</span>
x<span class='operator'>.</span>get_<span class='shy'></span>allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#list.ops-2.sentence-2'>.</a></div></div></div><div class='texpara'><div id='lib:list,splice'><div id='lib:splice,list'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:splice,list'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>void</span> splice<span class='parenthesis'>(</span>const_iterator position, list<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
<span class="keyword added">constexpr</span> <span class='keyword'>void</span> splice<span class='parenthesis'>(</span>const_iterator position, list<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='list.ops-3'><div class='marginalizedparent'><a class='marginalized' href='#list.ops-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8330'>#</a></div><div class='texpara'><div id='list.ops-3.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>addressof<span class='parenthesis'>(</span>x<span class='parenthesis'>)</span> <span class='operator'>!</span><span class='operator'>=</span> <span class='keyword'>this</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#list.ops-3.sentence-1'>.</a></div></div></div></div><div class='para' id='list.ops-4'><div class='marginalizedparent'><a class='marginalized' href='#list.ops-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8334'>#</a></div><div class='texpara'><div id='list.ops-4.sentence-1' class='sentence'><i >Effects</i>: Inserts the contents of
<span class='texttt'>x</span>
before
<span class='texttt'>position</span>
and
<span class='texttt'>x</span>
becomes empty<a class='hidden_link' href='#list.ops-4.sentence-1'>.</a></div> <div id='list.ops-4.sentence-2' class='sentence'>Pointers and references to the moved elements of
<span class='texttt'>x</span>
now refer to those same elements but as members of
<span class='texttt'><span class='operator'>*</span><span class='keyword'>this</span></span><a class='hidden_link' href='#list.ops-4.sentence-2'>.</a></div> <div id='list.ops-4.sentence-3' class='sentence'>Iterators referring to the moved elements will continue to refer to their
elements, but they now behave as iterators into
<span class='texttt'><span class='operator'>*</span><span class='keyword'>this</span></span>,
not into
<span class='texttt'>x</span><a class='hidden_link' href='#list.ops-4.sentence-3'>.</a></div></div></div></div><div class='para' id='list.ops-5'><div class='marginalizedparent'><a class='marginalized' href='#list.ops-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8353'>#</a></div><div class='texpara'><div id='list.ops-5.sentence-1' class='sentence'><i >Throws</i>: Nothing<a class='hidden_link' href='#list.ops-5.sentence-1'>.</a></div></div></div></div><div class='para' id='list.ops-6'><div class='marginalizedparent'><a class='marginalized' href='#list.ops-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8357'>#</a></div><div class='texpara'><div id='list.ops-6.sentence-1' class='sentence'><i >Complexity</i>: Constant time<a class='hidden_link' href='#list.ops-6.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:list,splice_'><div id='lib:splice,list_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:splice,list_'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>void</span> splice<span class='parenthesis'>(</span>const_iterator position, list<span class='operator'>&amp;</span> x, const_iterator i<span class='parenthesis'>)</span>;
<span class="keyword added">constexpr</span> <span class='keyword'>void</span> splice<span class='parenthesis'>(</span>const_iterator position, list<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x, const_iterator i<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='list.ops-7'><div class='marginalizedparent'><a class='marginalized' href='#list.ops-7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8369'>#</a></div><div class='texpara'><div id='list.ops-7.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>i</span> is a valid dereferenceable iterator of <span class='texttt'>x</span><a class='hidden_link' href='#list.ops-7.sentence-1'>.</a></div></div></div></div><div class='para' id='list.ops-8'><div class='marginalizedparent'><a class='marginalized' href='#list.ops-8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8373'>#</a></div><div class='texpara'><div id='list.ops-8.sentence-1' class='sentence'><i >Effects</i>: Inserts an element pointed to by
<span class='texttt'>i</span>
from list
<span class='texttt'>x</span>
before <span class='texttt'>position</span> and removes the element from
<span class='texttt'>x</span><a class='hidden_link' href='#list.ops-8.sentence-1'>.</a></div> <div id='list.ops-8.sentence-2' class='sentence'>The result is unchanged if
<span class='texttt'>position <span class='operator'>=</span><span class='operator'>=</span> i</span>
or
<span class='texttt'>position <span class='operator'>=</span><span class='operator'>=</span> <span class='operator'>+</span><span class='operator'>+</span>i</span><a class='hidden_link' href='#list.ops-8.sentence-2'>.</a></div> <div id='list.ops-8.sentence-3' class='sentence'>Pointers and references to
<span class='texttt'><span class='operator'>*</span>i</span>
continue to refer to this same element but as a member of
<span class='texttt'><span class='operator'>*</span><span class='keyword'>this</span></span><a class='hidden_link' href='#list.ops-8.sentence-3'>.</a></div> <div id='list.ops-8.sentence-4' class='sentence'>Iterators
to
<span class='texttt'><span class='operator'>*</span>i</span>
(including
<span class='texttt'>i</span>
itself) continue to refer to the same element, but now behave as iterators into
<span class='texttt'><span class='operator'>*</span><span class='keyword'>this</span></span>,
not into
<span class='texttt'>x</span><a class='hidden_link' href='#list.ops-8.sentence-4'>.</a></div></div></div></div><div class='para' id='list.ops-9'><div class='marginalizedparent'><a class='marginalized' href='#list.ops-9'>9</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8399'>#</a></div><div class='texpara'><div id='list.ops-9.sentence-1' class='sentence'><i >Throws</i>: Nothing<a class='hidden_link' href='#list.ops-9.sentence-1'>.</a></div></div></div></div><div class='para' id='list.ops-10'><div class='marginalizedparent'><a class='marginalized' href='#list.ops-10'>10</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8403'>#</a></div><div class='texpara'><div id='list.ops-10.sentence-1' class='sentence'><i >Complexity</i>: Constant time<a class='hidden_link' href='#list.ops-10.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:list,splice__'><div id='lib:splice,list__'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:splice,list__'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>void</span> splice<span class='parenthesis'>(</span>const_iterator position, list<span class='operator'>&amp;</span> x, const_iterator first,
            const_iterator last<span class='parenthesis'>)</span>;
<span class="keyword added">constexpr</span> <span class='keyword'>void</span> splice<span class='parenthesis'>(</span>const_iterator position, list<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x, const_iterator first,
            const_iterator last<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='list.ops-11'><div class='marginalizedparent'><a class='marginalized' href='#list.ops-11'>11</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8417'>#</a></div><div class='texpara'><div id='list.ops-11.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'><span class='squarebracket'>[</span>first, last<span class='parenthesis'>)</span></span> is a valid range in <span class='texttt'>x</span><a class='hidden_link' href='#list.ops-11.sentence-1'>.</a></div> <div id='list.ops-11.sentence-2' class='sentence'><span class='texttt'>position</span> is not an iterator in the range [<span class='texttt'>first, last</span>)<a class='hidden_link' href='#list.ops-11.sentence-2'>.</a></div></div></div></div><div class='para' id='list.ops-12'><div class='marginalizedparent'><a class='marginalized' href='#list.ops-12'>12</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8422'>#</a></div><div class='texpara'><div id='list.ops-12.sentence-1' class='sentence'><i >Effects</i>: Inserts elements in the range
[<span class='texttt'>first, last</span>)
before
<span class='texttt'>position</span>
and removes the elements from
<span class='texttt'>x</span><a class='hidden_link' href='#list.ops-12.sentence-1'>.</a></div> <div id='list.ops-12.sentence-2' class='sentence'>Pointers and references to the moved elements of
<span class='texttt'>x</span>
now refer to those same elements but as members of
<span class='texttt'><span class='operator'>*</span><span class='keyword'>this</span></span><a class='hidden_link' href='#list.ops-12.sentence-2'>.</a></div> <div id='list.ops-12.sentence-3' class='sentence'>Iterators referring to the moved elements will continue to refer to their
elements, but they now behave as iterators into
<span class='texttt'><span class='operator'>*</span><span class='keyword'>this</span></span>,
not into
<span class='texttt'>x</span><a class='hidden_link' href='#list.ops-12.sentence-3'>.</a></div></div></div></div><div class='para' id='list.ops-13'><div class='marginalizedparent'><a class='marginalized' href='#list.ops-13'>13</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8440'>#</a></div><div class='texpara'><div id='list.ops-13.sentence-1' class='sentence'><i >Throws</i>: Nothing<a class='hidden_link' href='#list.ops-13.sentence-1'>.</a></div></div></div></div><div class='para' id='list.ops-14'><div class='marginalizedparent'><a class='marginalized' href='#list.ops-14'>14</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8444'>#</a></div><div class='texpara'><div id='list.ops-14.sentence-1' class='sentence'><i >Complexity</i>: Constant time if
<span class='texttt'>addressof<span class='parenthesis'>(</span>x<span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> <span class='keyword'>this</span></span>;
otherwise, linear time<a class='hidden_link' href='#list.ops-14.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:list,remove'><div id='lib:remove,list'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:remove,list'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> size_type remove<span class='parenthesis'>(</span><span class='keyword'>const</span> T<span class='operator'>&amp;</span> value<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Predicate<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> size_type remove_if<span class='parenthesis'>(</span>Predicate pred<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='list.ops-15'><div class='marginalizedparent'><a class='marginalized' href='#list.ops-15'>15</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8458'>#</a></div><div class='texpara'><div id='list.ops-15.sentence-1' class='sentence'><i >Effects</i>: Erases all the elements in the list referred to by a list iterator <span class='texttt'>i</span> for which the
following conditions hold: <span class='texttt'><span class='operator'>*</span>i <span class='operator'>=</span><span class='operator'>=</span> value</span>, <span class='texttt'>pred<span class='parenthesis'>(</span><span class='operator'>*</span>i<span class='parenthesis'>)</span> <span class='operator'>!</span><span class='operator'>=</span> <span class='literal'>false</span></span><a class='hidden_link' href='#list.ops-15.sentence-1'>.</a></div> <div id='list.ops-15.sentence-2' class='sentence'>Invalidates only the iterators and references to the erased elements<a class='hidden_link' href='#list.ops-15.sentence-2'>.</a></div></div></div></div><div class='para' id='list.ops-16'><div class='marginalizedparent'><a class='marginalized' href='#list.ops-16'>16</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8464'>#</a></div><div class='texpara'><div id='list.ops-16.sentence-1' class='sentence'><i >Returns</i>: The number of elements erased<a class='hidden_link' href='#list.ops-16.sentence-1'>.</a></div></div></div></div><div class='para' id='list.ops-17'><div class='marginalizedparent'><a class='marginalized' href='#list.ops-17'>17</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8468'>#</a></div><div class='texpara'><div id='list.ops-17.sentence-1' class='sentence'><i >Throws</i>: Nothing unless an exception is thrown by
<span class='texttt'><span class='operator'>*</span>i <span class='operator'>=</span><span class='operator'>=</span> value</span>
or
<span class='texttt'>pred<span class='parenthesis'>(</span><span class='operator'>*</span>i<span class='parenthesis'>)</span> <span class='operator'>!</span><span class='operator'>=</span> <span class='literal'>false</span></span><a class='hidden_link' href='#list.ops-17.sentence-1'>.</a></div></div></div></div><div class='para' id='list.ops-18'><div class='marginalizedparent'><a class='marginalized' href='#list.ops-18'>18</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8475'>#</a></div><div class='texpara'><div id='list.ops-18.sentence-1' class='sentence'><i >Complexity</i>: Exactly
<span class='texttt'>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>
applications of the corresponding predicate<a class='hidden_link' href='#list.ops-18.sentence-1'>.</a></div></div></div></div><div class='para' id='list.ops-19'><div class='marginalizedparent'><a class='marginalized' href='#list.ops-19'>19</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8481'>#</a></div><div class='texpara'><div id='list.ops-19.sentence-1' class='sentence'><i >Remarks</i>: <a href='algorithm.stable' title='16.4.6.8&emsp;Requirements for stable algorithms&emsp;[algorithm.stable]'>Stable</a><a class='hidden_link' href='#list.ops-19.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:list,unique'><div id='lib:unique,list'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:unique,list'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> size_type unique<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> BinaryPredicate<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> size_type unique<span class='parenthesis'>(</span>BinaryPredicate binary_pred<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='list.ops-20'><div class='marginalizedparent'><a class='marginalized' href='#list.ops-20'>20</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8493'>#</a></div><div class='texpara'><div id='list.ops-20.sentence-1' class='sentence'>Let <span class='texttt'>binary_<span class='shy'></span>pred</span> be <span class='texttt'>equal_<span class='shy'></span>to<span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span><span class='curlybracket'>{</span><span class='curlybracket'>}</span></span> for the first overload<a class='hidden_link' href='#list.ops-20.sentence-1'>.</a></div></div></div></div><div class='para' id='list.ops-21'><div class='marginalizedparent'><a class='marginalized' href='#list.ops-21'>21</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8496'>#</a></div><div class='texpara'><div id='list.ops-21.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>binary_<span class='shy'></span>pred</span> is an equivalence relation<a class='hidden_link' href='#list.ops-21.sentence-1'>.</a></div></div></div></div><div class='para' id='list.ops-22'><div class='marginalizedparent'><a class='marginalized' href='#list.ops-22'>22</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8500'>#</a></div><div class='texpara'><div id='list.ops-22.sentence-1' class='sentence'><i >Effects</i>: Erases all but the first element from every
consecutive group of equivalent elements<a class='hidden_link' href='#list.ops-22.sentence-1'>.</a></div> <div id='list.ops-22.sentence-2' class='sentence'>That is, for a nonempty list, erases all elements referred to
by the iterator <span class='texttt'>i</span> in the range [<span class='texttt'>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>+</span> <span class='literal'>1</span>, end<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>)
for which <span class='texttt'>binary_<span class='shy'></span>pred<span class='parenthesis'>(</span><span class='operator'>*</span>i, <span class='operator'>*</span><span class='parenthesis'>(</span>i <span class='operator'>-</span> <span class='literal'>1</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#list.ops-22.sentence-2'>.</a></div> <div id='list.ops-22.sentence-3' class='sentence'>Invalidates only the iterators and references to the erased elements<a class='hidden_link' href='#list.ops-22.sentence-3'>.</a></div></div></div></div><div class='para' id='list.ops-23'><div class='marginalizedparent'><a class='marginalized' href='#list.ops-23'>23</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8509'>#</a></div><div class='texpara'><div id='list.ops-23.sentence-1' class='sentence'><i >Returns</i>: The number of elements erased<a class='hidden_link' href='#list.ops-23.sentence-1'>.</a></div></div></div></div><div class='para' id='list.ops-24'><div class='marginalizedparent'><a class='marginalized' href='#list.ops-24'>24</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8513'>#</a></div><div class='texpara'><div id='list.ops-24.sentence-1' class='sentence'><i >Throws</i>: Nothing unless an exception is thrown by the predicate<a class='hidden_link' href='#list.ops-24.sentence-1'>.</a></div></div></div></div><div class='para' id='list.ops-25'><div class='marginalizedparent'><a class='marginalized' href='#list.ops-25'>25</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8517'>#</a></div><div class='texpara'><div id='list.ops-25.sentence-1' class='sentence'><i >Complexity</i>: If <span class='texttt'>empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> is <span class='texttt'><span class='literal'>false</span></span>,
exactly <span class='texttt'>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>-</span> <span class='literal'>1</span></span> applications of the corresponding predicate,
otherwise no applications of the predicate<a class='hidden_link' href='#list.ops-25.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:list,merge'><div id='lib:merge,list'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:merge,list'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>list<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
<span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>list<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Compare<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>list<span class='operator'>&amp;</span> x, Compare comp<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Compare<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>list<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x, Compare comp<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='list.ops-26'><div class='marginalizedparent'><a class='marginalized' href='#list.ops-26'>26</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8533'>#</a></div><div class='texpara'><div id='list.ops-26.sentence-1' class='sentence'>Let <span class='texttt'>comp</span> be <span class='texttt'>less<span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span></span> for the first two overloads<a class='hidden_link' href='#list.ops-26.sentence-1'>.</a></div></div></div></div><div class='para' id='list.ops-27'><div class='marginalizedparent'><a class='marginalized' href='#list.ops-27'>27</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8536'>#</a></div><div class='texpara'><div id='list.ops-27.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'><span class='operator'>*</span><span class='keyword'>this</span></span> and <span class='texttt'>x</span> are both sorted
with respect to the comparator <span class='texttt'>comp</span>, and
<span class='texttt'>get_<span class='shy'></span>allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> x<span class='operator'>.</span>get_<span class='shy'></span>allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#list.ops-27.sentence-1'>.</a></div></div></div></div><div class='para' id='list.ops-28'><div class='marginalizedparent'><a class='marginalized' href='#list.ops-28'>28</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8542'>#</a></div><div class='texpara'><div id='list.ops-28.sentence-1' class='sentence'><i >Effects</i>: If <span class='texttt'>addressof<span class='parenthesis'>(</span>x<span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> <span class='keyword'>this</span></span>, there are no effects<a class='hidden_link' href='#list.ops-28.sentence-1'>.</a></div> <div id='list.ops-28.sentence-2' class='sentence'>Otherwise, merges
the two sorted ranges [<span class='texttt'>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, end<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>) and [<span class='texttt'>x<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, x<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>)<a class='hidden_link' href='#list.ops-28.sentence-2'>.</a></div> <div id='list.ops-28.sentence-3' class='sentence'>The result is a range
that is sorted with respect to the comparator <span class='texttt'>comp</span><a class='hidden_link' href='#list.ops-28.sentence-3'>.</a></div> <div id='list.ops-28.sentence-4' class='sentence'>Pointers and references to the moved elements of <span class='texttt'>x</span> now refer to those same elements
but as members of <span class='texttt'><span class='operator'>*</span><span class='keyword'>this</span></span><a class='hidden_link' href='#list.ops-28.sentence-4'>.</a></div> <div id='list.ops-28.sentence-5' class='sentence'>Iterators referring to the moved elements will continue to
refer to their elements, but they now behave as iterators into <span class='texttt'><span class='operator'>*</span><span class='keyword'>this</span></span>, not into
<span class='texttt'>x</span><a class='hidden_link' href='#list.ops-28.sentence-5'>.</a></div></div></div></div><div class='para' id='list.ops-29'><div class='marginalizedparent'><a class='marginalized' href='#list.ops-29'>29</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8554'>#</a></div><div class='texpara'><div id='list.ops-29.sentence-1' class='sentence'><i >Complexity</i>: At most <span class='texttt'>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>+</span> x<span class='operator'>.</span>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>-</span> <span class='literal'>1</span></span> comparisons
if <span class='texttt'>addressof<span class='parenthesis'>(</span>x<span class='parenthesis'>)</span> <span class='operator'>!</span><span class='operator'>=</span> <span class='keyword'>this</span></span>;
otherwise, no comparisons are performed<a class='hidden_link' href='#list.ops-29.sentence-1'>.</a></div></div></div></div><div class='para' id='list.ops-30'><div class='marginalizedparent'><a class='marginalized' href='#list.ops-30'>30</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8560'>#</a></div><div class='texpara'><div id='list.ops-30.sentence-1' class='sentence'><i >Remarks</i>: Stable (<a href='algorithm.stable' title='16.4.6.8&emsp;Requirements for stable algorithms'>[algorithm.<span class='shy'></span>stable]</a>)<a class='hidden_link' href='#list.ops-30.sentence-1'>.</a></div> <div id='list.ops-30.sentence-2' class='sentence'>If <span class='texttt'>addressof<span class='parenthesis'>(</span>x<span class='parenthesis'>)</span> <span class='operator'>!</span><span class='operator'>=</span> <span class='keyword'>this</span></span>, <span class='texttt'>x</span> is empty after the merge<a class='hidden_link' href='#list.ops-30.sentence-2'>.</a></div> <div id='list.ops-30.sentence-3' class='sentence'>No elements are copied by this operation<a class='hidden_link' href='#list.ops-30.sentence-3'>.</a></div> <div id='list.ops-30.sentence-4' class='sentence'>If an exception is thrown other than by a comparison there are no effects<a class='hidden_link' href='#list.ops-30.sentence-4'>.</a></div></div></div></div><div class='texpara'><div id='lib:list,reverse'><div id='lib:reverse,list'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:reverse,list'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>void</span> reverse<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
</code></div></div></div></div><div class='para' id='list.ops-31'><div class='marginalizedparent'><a class='marginalized' href='#list.ops-31'>31</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8574'>#</a></div><div class='texpara'><div id='list.ops-31.sentence-1' class='sentence'><i >Effects</i>: Reverses the order of the elements in the list<a class='hidden_link' href='#list.ops-31.sentence-1'>.</a></div> <div id='list.ops-31.sentence-2' class='sentence'>Does not affect the validity of iterators and references<a class='hidden_link' href='#list.ops-31.sentence-2'>.</a></div></div></div></div><div class='para' id='list.ops-32'><div class='marginalizedparent'><a class='marginalized' href='#list.ops-32'>32</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8579'>#</a></div><div class='texpara'><div id='list.ops-32.sentence-1' class='sentence'><i >Complexity</i>: Linear time<a class='hidden_link' href='#list.ops-32.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:list,sort'><div id='lib:sort,list'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:sort,list'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>void</span> sort<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Compare<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> <span class='keyword'>void</span> sort<span class='parenthesis'>(</span>Compare comp<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='list.ops-33'><div class='marginalizedparent'><a class='marginalized' href='#list.ops-33'>33</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8591'>#</a></div><div class='texpara'><div id='list.ops-33.sentence-1' class='sentence'><i >Effects</i>: Sorts the list according to the <span class='texttt'><span class='keyword'>operator</span><span class='anglebracket'>&lt;</span></span> or a <span class='texttt'>Compare</span> function object<a class='hidden_link' href='#list.ops-33.sentence-1'>.</a></div> <div id='list.ops-33.sentence-2' class='sentence'>If an exception is thrown,
the order of the elements in <span class='texttt'><span class='operator'>*</span><span class='keyword'>this</span></span> is unspecified<a class='hidden_link' href='#list.ops-33.sentence-2'>.</a></div> <div id='list.ops-33.sentence-3' class='sentence'>Does not affect the validity of iterators and references<a class='hidden_link' href='#list.ops-33.sentence-3'>.</a></div></div></div></div><div class='para' id='list.ops-34'><div class='marginalizedparent'><a class='marginalized' href='#list.ops-34'>34</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8598'>#</a></div><div class='texpara'><div id='list.ops-34.sentence-1' class='sentence'><i >Complexity</i>: Approximately
<span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.085em;">N</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">log</span></span><span class="mjx-mo"><span class="mjx-char"></span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.085em;">N</span></span></span></span></span></span>
comparisons, where
<span class='texttt'>N <span class='operator'>=</span><span class='operator'>=</span> size<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#list.ops-34.sentence-1'>.</a></div></div></div></div><div class='para' id='list.ops-35'><div class='marginalizedparent'><a class='marginalized' href='#list.ops-35'>35</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8605'>#</a></div><div class='texpara'><div id='list.ops-35.sentence-1' class='sentence'><i >Remarks</i>: <a href='algorithm.stable' title='16.4.6.8&emsp;Requirements for stable algorithms&emsp;[algorithm.stable]'>Stable</a><a class='hidden_link' href='#list.ops-35.sentence-1'>.</a></div></div></div></div><div class='footnoteSeparator'></div><div class='footnote' id='footnote-205'><div class='texpara'><a class='footnotenum' href='#footnote-205'>205)</a><a class='footnoteBacklink' href='#footnoteref-205'>205)</a> <div id='footnote-205.sentence-1' class='sentence'>As specified
in <a href='allocator.requirements' title='16.4.4.6&emsp;Cpp17Allocator requirements'>[allocator.<span class='shy'></span>requirements]</a>, the requirements in this Clause apply only to
lists whose allocators compare equal<a class='hidden_link' href='#footnote-205.sentence-1'>.</a></div></div></div></div><div id='list.erasure' class='section'><h4 ><a class='secnum' href='#list.erasure' style='min-width:95pt'>24.3.11.6</a> Erasure <a class='abbr_ref' href='list.erasure'>[list.erasure]</a></h4><div class='texpara'><div id='lib:list,erase__'><div id='lib:erase,list_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:erase,list_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Allocator, <span class='keyword'>class</span> U <span class='operator'>=</span> T<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>typename</span> list<span class='anglebracket'>&lt;</span>T, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>size_type
    erase<span class='parenthesis'>(</span>list<span class='anglebracket'>&lt;</span>T, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> c, <span class='keyword'>const</span> U<span class='operator'>&amp;</span> value<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='list.erasure-1'><div class='marginalizedparent'><a class='marginalized' href='#list.erasure-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8620'>#</a></div><div class='texpara'><div id='list.erasure-1.sentence-1' class='sentence'><i >Effects</i>: Equivalent to: <span class='texttt'><span class='keyword'>return</span> erase_<span class='shy'></span>if<span class='parenthesis'>(</span>c, <span class='squarebracket'>[</span><span class='operator'>&amp;</span><span class='squarebracket'>]</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='operator'>&amp;</span> elem<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='keyword'>return</span> elem <span class='operator'>=</span><span class='operator'>=</span> value; <span class='curlybracket'>}</span><span class='parenthesis'>)</span>;</span></div></div></div></div><div class='texpara'><div id='lib:list,erase_if'><div id='lib:erase_if,list'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:erase_if,list'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Allocator, <span class='keyword'>class</span> Predicate<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>typename</span> list<span class='anglebracket'>&lt;</span>T, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>size_type
    erase_if<span class='parenthesis'>(</span>list<span class='anglebracket'>&lt;</span>T, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> c, Predicate pred<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='list.erasure-2'><div class='marginalizedparent'><a class='marginalized' href='#list.erasure-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L8633'>#</a></div><div class='texpara'><div id='list.erasure-2.sentence-1' class='sentence'><i >Effects</i>: Equivalent to: <span class='texttt'><span class='keyword'>return</span> c<span class='operator'>.</span>remove_<span class='shy'></span>if<span class='parenthesis'>(</span>pred<span class='parenthesis'>)</span>;</span></div></div></div></div></div></div>




<div id='associative' class='section'><h2 ><a class='secnum' href='#associative' style='min-width:65pt'>24.4</a> Associative containers <a class='abbr_ref' href='associative'>[associative]</a></h2><div id='associative.general' class='section'><h3 ><a class='secnum' href='#associative.general' style='min-width:80pt'>24.4.1</a> General <a class='abbr_ref' href='associative.general'>[associative.general]</a></h3><div class='para' id='associative.general-1'><div class='marginalizedparent'><a class='marginalized' href='#associative.general-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10142'>#</a></div><div class='texpara'><div id='associative.general-1.sentence-1' class='sentence'>The header <a href='#header:%3cmap%3e' title='24.4.2&emsp;Header &lt;map&gt; synopsis&emsp;[associative.map.syn]'><span id='headerref:<map>'><span class='texttt'>&lt;map&gt;</span></span></a> defines the class templates
<span class='texttt'>map</span> and <span class='texttt'>multimap</span>;
the header <a href='#header:%3cset%3e' title='24.4.3&emsp;Header &lt;set&gt; synopsis&emsp;[associative.set.syn]'><span id='headerref:<set>'><span class='texttt'>&lt;set&gt;</span></span></a> defines the class templates
<span class='texttt'>set</span> and <span class='texttt'>multiset</span><a class='hidden_link' href='#associative.general-1.sentence-1'>.</a></div></div></div><div class='para' id='associative.general-2'><div class='marginalizedparent'><a class='marginalized' href='#associative.general-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10148'>#</a></div><div class='texpara'><div id='associative.general-2.sentence-1' class='sentence'>The following exposition-only alias templates may appear in deduction guides for associative containers:
<span class='codeblock'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
  <span class='keyword'>using</span> <i >iter-value-type</i> <span class='operator'>=</span>
    <span class='keyword'>typename</span> iterator_traits<span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>value_type;                <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
  <span class='keyword'>using</span> <i >iter-key-type</i> <span class='operator'>=</span> remove_const_t<span class='anglebracket'>&lt;</span>
    tuple_element_t<span class='anglebracket'>&lt;</span><span class='literal'>0</span>, <i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;                <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
  <span class='keyword'>using</span> <i >iter-mapped-type</i> <span class='operator'>=</span>
    tuple_element_t<span class='anglebracket'>&lt;</span><span class='literal'>1</span>, <i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;                 <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
  <span class='keyword'>using</span> <i >iter-to-alloc-type</i> <span class='operator'>=</span> pair<span class='anglebracket'>&lt;</span>
    add_const_t<span class='anglebracket'>&lt;</span>tuple_element_t<span class='anglebracket'>&lt;</span><span class='literal'>0</span>, <i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
    tuple_element_t<span class='anglebracket'>&lt;</span><span class='literal'>1</span>, <i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;                <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range_____'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> Range<span class='anglebracket'>&gt;</span>
  <span class='keyword'>using</span> <i >range-key-type</i> <span class='operator'>=</span>
    remove_const_t<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>Range<span class='anglebracket'>&gt;</span><span class='operator'>::</span>first_type<span class='anglebracket'>&gt;</span>;  <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range______'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> Range<span class='anglebracket'>&gt;</span>
  <span class='keyword'>using</span> <i >range-mapped-type</i> <span class='operator'>=</span> <span class='keyword'>typename</span> ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>Range<span class='anglebracket'>&gt;</span><span class='operator'>::</span>second_type; <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range_______'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> Range<span class='anglebracket'>&gt;</span>
  <span class='keyword'>using</span> <i >range-to-alloc-type</i> <span class='operator'>=</span>
    pair<span class='anglebracket'>&lt;</span>add_const_t<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>Range<span class='anglebracket'>&gt;</span><span class='operator'>::</span>first_type<span class='anglebracket'>&gt;</span>,
         <span class='keyword'>typename</span> ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>Range<span class='anglebracket'>&gt;</span><span class='operator'>::</span>second_type<span class='anglebracket'>&gt;</span>;           <span class='comment'>// <i >exposition only</i></span>
</span></div></div></div></div><div id='associative.map.syn' class='section'><h3 ><a class='secnum' href='#associative.map.syn' style='min-width:80pt'>24.4.2</a> Header <span class='texttt'>&lt;map&gt;</span> synopsis <a class='abbr_ref' href='associative.map.syn'>[associative.map.syn]</a></h3><div class='texpara'><span id='header:<map>'><div class='marginalizedparent'><a class='itemDeclLink' href='#header:%3cmap%3e'>🔗</a></div><span class='codeblock'><span class='preprocessordirective'>#include</span> <span class='anglebracket'>&lt;</span>compare<span class='anglebracket'>&gt;</span>              <span class='comment'>// see <a href='compare.syn' title='17.11.1&emsp;Header &lt;compare&gt; synopsis'>[compare.<span class='shy'></span>syn]</a></span>
<span class='preprocessordirective'>#include</span> <span class='anglebracket'>&lt;</span>initializer_list<span class='anglebracket'>&gt;</span>     <span class='comment'>// see <a href='initializer.list.syn' title='17.10.2&emsp;Header &lt;initializer_&shy;list&gt; synopsis'>[initializer.<span class='shy'></span>list.<span class='shy'></span>syn]</a></span>

<span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='comment'>// <a href='#map' title='24.4.4&emsp;Class template map'>[map]</a>, class template <span class='tcode_in_codeblock'>map</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span>pair<span class='anglebracket'>&lt;</span><span class='keyword'>const</span> Key, T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    <span class='keyword'>class</span> map;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr </span><span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> map<span class='anglebracket'>&lt;</span>Key, T, Compare, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x,
                    <span class='keyword'>const</span> map<span class='anglebracket'>&lt;</span>Key, T, Compare, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr </span><i >synth-three-way-result</i><span class='anglebracket'>&lt;</span>pair<span class='anglebracket'>&lt;</span><span class='keyword'>const</span> Key, T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
      <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='operator'>=</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='keyword'>const</span> map<span class='anglebracket'>&lt;</span>Key, T, Compare, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x,
                  <span class='keyword'>const</span> map<span class='anglebracket'>&lt;</span>Key, T, Compare, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr </span><span class='keyword'>void</span> swap<span class='parenthesis'>(</span>map<span class='anglebracket'>&lt;</span>Key, T, Compare, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x,
              map<span class='anglebracket'>&lt;</span>Key, T, Compare, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>
      <span class='keyword'>noexcept</span><span class='parenthesis'>(</span><span class='keyword'>noexcept</span><span class='parenthesis'>(</span>x<span class='operator'>.</span>swap<span class='parenthesis'>(</span>y<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;

  <span class='comment'>// <a href='#map.erasure' title='24.4.4.5&emsp;Erasure'>[map.<span class='shy'></span>erasure]</a>, erasure for <span class='tcode_in_codeblock'>map</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> Allocator, <span class='keyword'>class</span> Predicate<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr </span><span class='keyword'>typename</span> map<span class='anglebracket'>&lt;</span>Key, T, Compare, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>size_type
      erase_if<span class='parenthesis'>(</span>map<span class='anglebracket'>&lt;</span>Key, T, Compare, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> c, Predicate pred<span class='parenthesis'>)</span>;

  <span class='comment'>// <a href='#multimap' title='24.4.5&emsp;Class template multimap'>[multimap]</a>, class template <span class='tcode_in_codeblock'>multimap</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span>pair<span class='anglebracket'>&lt;</span><span class='keyword'>const</span> Key, T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    <span class='keyword'>class</span> multimap;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr </span><span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> multimap<span class='anglebracket'>&lt;</span>Key, T, Compare, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x,
                    <span class='keyword'>const</span> multimap<span class='anglebracket'>&lt;</span>Key, T, Compare, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr </span><i >synth-three-way-result</i><span class='anglebracket'>&lt;</span>pair<span class='anglebracket'>&lt;</span><span class='keyword'>const</span> Key, T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
      <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='operator'>=</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='keyword'>const</span> multimap<span class='anglebracket'>&lt;</span>Key, T, Compare, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x,
                  <span class='keyword'>const</span> multimap<span class='anglebracket'>&lt;</span>Key, T, Compare, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr </span><span class='keyword'>void</span> swap<span class='parenthesis'>(</span>multimap<span class='anglebracket'>&lt;</span>Key, T, Compare, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x,
              multimap<span class='anglebracket'>&lt;</span>Key, T, Compare, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>
      <span class='keyword'>noexcept</span><span class='parenthesis'>(</span><span class='keyword'>noexcept</span><span class='parenthesis'>(</span>x<span class='operator'>.</span>swap<span class='parenthesis'>(</span>y<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;

  <span class='comment'>// <a href='#multimap.erasure' title='24.4.5.4&emsp;Erasure'>[multimap.<span class='shy'></span>erasure]</a>, erasure for <span class='tcode_in_codeblock'>multimap</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> Allocator, <span class='keyword'>class</span> Predicate<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr </span><span class='keyword'>typename</span> multimap<span class='anglebracket'>&lt;</span>Key, T, Compare, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>size_type
      erase_if<span class='parenthesis'>(</span>multimap<span class='anglebracket'>&lt;</span>Key, T, Compare, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> c, Predicate pred<span class='parenthesis'>)</span>;

  <span class='keyword'>namespace</span> pmr <span class='curlybracket'>{</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
      <span class='keyword'>using</span> map <span class='operator'>=</span> std<span class='operator'>::</span>map<span class='anglebracket'>&lt;</span>Key, T, Compare,
                           polymorphic_allocator<span class='anglebracket'>&lt;</span>pair<span class='anglebracket'>&lt;</span><span class='keyword'>const</span> Key, T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;

    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
      <span class='keyword'>using</span> multimap <span class='operator'>=</span> std<span class='operator'>::</span>multimap<span class='anglebracket'>&lt;</span>Key, T, Compare,
                                     polymorphic_allocator<span class='anglebracket'>&lt;</span>pair<span class='anglebracket'>&lt;</span><span class='keyword'>const</span> Key, T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;
  <span class='curlybracket'>}</span>
<span class='curlybracket'>}</span>
</span></span></div></div><div id='associative.set.syn' class='section'><h3 ><a class='secnum' href='#associative.set.syn' style='min-width:80pt'>24.4.3</a> Header <span class='texttt'>&lt;set&gt;</span> synopsis <a class='abbr_ref' href='associative.set.syn'>[associative.set.syn]</a></h3><div class='texpara'><span id='header:<set>'><div class='marginalizedparent'><a class='itemDeclLink' href='#header:%3cset%3e'>🔗</a></div><span class='codeblock'><span class='preprocessordirective'>#include</span> <span class='anglebracket'>&lt;</span>compare<span class='anglebracket'>&gt;</span>              <span class='comment'>// see <a href='compare.syn' title='17.11.1&emsp;Header &lt;compare&gt; synopsis'>[compare.<span class='shy'></span>syn]</a></span>
<span class='preprocessordirective'>#include</span> <span class='anglebracket'>&lt;</span>initializer_list<span class='anglebracket'>&gt;</span>     <span class='comment'>// see <a href='initializer.list.syn' title='17.10.2&emsp;Header &lt;initializer_&shy;list&gt; synopsis'>[initializer.<span class='shy'></span>list.<span class='shy'></span>syn]</a></span>

<span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='comment'>// <a href='#set' title='24.4.6&emsp;Class template set'>[set]</a>, class template <span class='tcode_in_codeblock'>set</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>, <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    <span class='keyword'>class</span> set;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr </span><span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> set<span class='anglebracket'>&lt;</span>Key, Compare, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x,
                    <span class='keyword'>const</span> set<span class='anglebracket'>&lt;</span>Key, Compare, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr </span><i >synth-three-way-result</i><span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span> <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='operator'>=</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='keyword'>const</span> set<span class='anglebracket'>&lt;</span>Key, Compare, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x,
                                            <span class='keyword'>const</span> set<span class='anglebracket'>&lt;</span>Key, Compare, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr </span><span class='keyword'>void</span> swap<span class='parenthesis'>(</span>set<span class='anglebracket'>&lt;</span>Key, Compare, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x,
              set<span class='anglebracket'>&lt;</span>Key, Compare, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>
      <span class='keyword'>noexcept</span><span class='parenthesis'>(</span><span class='keyword'>noexcept</span><span class='parenthesis'>(</span>x<span class='operator'>.</span>swap<span class='parenthesis'>(</span>y<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;

  <span class='comment'>// <a href='#set.erasure' title='24.4.6.3&emsp;Erasure'>[set.<span class='shy'></span>erasure]</a>, erasure for <span class='tcode_in_codeblock'>set</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> Allocator, <span class='keyword'>class</span> Predicate<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr </span><span class='keyword'>typename</span> set<span class='anglebracket'>&lt;</span>Key, Compare, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>size_type
      erase_if<span class='parenthesis'>(</span>set<span class='anglebracket'>&lt;</span>Key, Compare, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> c, Predicate pred<span class='parenthesis'>)</span>;

  <span class='comment'>// <a href='#multiset' title='24.4.7&emsp;Class template multiset'>[multiset]</a>, class template <span class='tcode_in_codeblock'>multiset</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>, <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    <span class='keyword'>class</span> multiset;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr </span><span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> multiset<span class='anglebracket'>&lt;</span>Key, Compare, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x,
                    <span class='keyword'>const</span> multiset<span class='anglebracket'>&lt;</span>Key, Compare, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr </span><i >synth-three-way-result</i><span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span> <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='operator'>=</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='keyword'>const</span> multiset<span class='anglebracket'>&lt;</span>Key, Compare, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x,
                                            <span class='keyword'>const</span> multiset<span class='anglebracket'>&lt;</span>Key, Compare, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr </span><span class='keyword'>void</span> swap<span class='parenthesis'>(</span>multiset<span class='anglebracket'>&lt;</span>Key, Compare, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x,
              multiset<span class='anglebracket'>&lt;</span>Key, Compare, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>
      <span class='keyword'>noexcept</span><span class='parenthesis'>(</span><span class='keyword'>noexcept</span><span class='parenthesis'>(</span>x<span class='operator'>.</span>swap<span class='parenthesis'>(</span>y<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;

  <span class='comment'>// <a href='#multiset.erasure' title='24.4.7.3&emsp;Erasure'>[multiset.<span class='shy'></span>erasure]</a>, erasure for <span class='tcode_in_codeblock'>multiset</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> Allocator, <span class='keyword'>class</span> Predicate<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr </span><span class='keyword'>typename</span> multiset<span class='anglebracket'>&lt;</span>Key, Compare, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>size_type
      erase_if<span class='parenthesis'>(</span>multiset<span class='anglebracket'>&lt;</span>Key, Compare, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> c, Predicate pred<span class='parenthesis'>)</span>;

  <span class='keyword'>namespace</span> pmr <span class='curlybracket'>{</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
      <span class='keyword'>using</span> set <span class='operator'>=</span> std<span class='operator'>::</span>set<span class='anglebracket'>&lt;</span>Key, Compare, polymorphic_allocator<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;

    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
      <span class='keyword'>using</span> multiset <span class='operator'>=</span> std<span class='operator'>::</span>multiset<span class='anglebracket'>&lt;</span>Key, Compare, polymorphic_allocator<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;
  <span class='curlybracket'>}</span>
<span class='curlybracket'>}</span>
</span></span></div></div><div id='map' class='section'><h3 ><a class='secnum' href='#map' style='min-width:80pt'>24.4.4</a> Class template <span class='texttt'>map</span> <a class='abbr_ref' href='map'>[map]</a></h3><div id='map.overview' class='section'><h4 ><a class='secnum' href='#map.overview' style='min-width:95pt'>24.4.4.1</a> Overview <a class='abbr_ref' href='map.overview'>[map.overview]</a></h4><div class='texpara'><a class='index' id='lib:map'></a></div><div class='para' id='map.overview-1'><div class='marginalizedparent'><a class='marginalized' href='#map.overview-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10306'>#</a></div><div class='texpara'><div id='map.overview-1.sentence-1' class='sentence'>A <span class='texttt'>map</span> is an associative container that
supports unique keys (i.e., contains at most one of each key value) and
provides for fast retrieval of values of another type <span class='texttt'>T</span> based
on the keys<a class='hidden_link' href='#map.overview-1.sentence-1'>.</a></div> <div id='map.overview-1.sentence-2' class='sentence'>The <span class='texttt'>map</span> class supports bidirectional iterators<a class='hidden_link' href='#map.overview-1.sentence-2'>.</a></div></div></div><div class='para' id='map.overview-2'><div class='marginalizedparent'><a class='marginalized' href='#map.overview-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10312'>#</a></div><div class='texpara'><div id='map.overview-2.sentence-1' class='sentence'>A <span class='texttt'>map</span> meets all of the requirements of
a container (<a href='#container.reqmts' title='24.2.2.2&emsp;Container requirements'>[container.<span class='shy'></span>reqmts]</a>),
of a reversible container (<a href='#container.rev.reqmts' title='24.2.2.3&emsp;Reversible container requirements'>[container.<span class='shy'></span>rev.<span class='shy'></span>reqmts]</a>),
of an allocator-aware container (<a href='#container.alloc.reqmts' title='24.2.2.5&emsp;Allocator-aware containers'>[container.<span class='shy'></span>alloc.<span class='shy'></span>reqmts]</a>)<a class='hidden_link' href='#map.overview-2.sentence-1'>.</a></div> <div id='map.overview-2.sentence-2' class='sentence'>and
of an associative container (<a href='#associative.reqmts' title='24.2.7&emsp;Associative containers'>[associative.<span class='shy'></span>reqmts]</a>)<a class='hidden_link' href='#map.overview-2.sentence-2'>.</a></div> <div id='map.overview-2.sentence-3' class='sentence'>A
<span class='texttt'>map</span>
also provides most operations described in <a href='#associative.reqmts' title='24.2.7&emsp;Associative containers'>[associative.<span class='shy'></span>reqmts]</a>
for unique keys<a class='hidden_link' href='#map.overview-2.sentence-3'>.</a></div> <div id='map.overview-2.sentence-4' class='sentence'>This means that a
<span class='texttt'>map</span>
supports the
<span class='texttt'>a_<span class='shy'></span>uniq</span>
operations in <a href='#associative.reqmts' title='24.2.7&emsp;Associative containers'>[associative.<span class='shy'></span>reqmts]</a>
but not the
<span class='texttt'>a_<span class='shy'></span>eq</span>
operations<a class='hidden_link' href='#map.overview-2.sentence-4'>.</a></div> <div id='map.overview-2.sentence-5' class='sentence'>For a
<span class='texttt'>map<span class='anglebracket'>&lt;</span>Key,T<span class='anglebracket'>&gt;</span></span>
the
<span class='texttt'>key_<span class='shy'></span>type</span>
is
<span class='texttt'>Key</span>
and the
<span class='texttt'>value_<span class='shy'></span>type</span>
is
<span class='texttt'>pair<span class='anglebracket'>&lt;</span><span class='keyword'>const</span> Key,T<span class='anglebracket'>&gt;</span></span><a class='hidden_link' href='#map.overview-2.sentence-5'>.</a></div> <div id='map.overview-2.sentence-6' class='sentence'>Descriptions are provided here only for operations on
<span class='texttt'>map</span>
that are not described in one of those tables
or for operations where there is additional semantic information<a class='hidden_link' href='#map.overview-2.sentence-6'>.</a></div></div>

<div class='para added' id='map.overview-3'><div class='marginalizedparent'><a class='marginalized' href='#map.overview-3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href=''>#</a></div>
<div class='texpara'>The types <span class="texttt">iterator</span> and <span class="texttt">const_iterator</span> meet the constexpr iterator requirements (<a href="iterator.requirements.general" title="25.3.1 General">[iterator.<span class="shy"></span>requirements.<span class="shy"></span>general]</a>).</div></div>

<div class='texpara'><span id='lib:map::value_compare,operator()'><span id='lib:operator(),map::value_compare'><span id='lib:map::value_compare,comp'><span id='lib:comp,map::value_compare'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:comp,map::value_compare'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span>pair<span class='anglebracket'>&lt;</span><span class='keyword'>const</span> Key, T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> map <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> key_type               <span class='operator'>=</span> Key;
    <span class='keyword'>using</span> mapped_type            <span class='operator'>=</span> T;
    <span class='keyword'>using</span> value_type             <span class='operator'>=</span> pair<span class='anglebracket'>&lt;</span><span class='keyword'>const</span> Key, T<span class='anglebracket'>&gt;</span>;
    <span class='keyword'>using</span> key_compare            <span class='operator'>=</span> Compare;
    <span class='keyword'>using</span> allocator_type         <span class='operator'>=</span> Allocator;
    <span class='keyword'>using</span> pointer                <span class='operator'>=</span> <span class='keyword'>typename</span> allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>pointer;
    <span class='keyword'>using</span> const_pointer          <span class='operator'>=</span> <span class='keyword'>typename</span> allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>const_pointer;
    <span class='keyword'>using</span> reference              <span class='operator'>=</span> value_type<span class='operator'>&amp;</span>;
    <span class='keyword'>using</span> const_reference        <span class='operator'>=</span> <span class='keyword'>const</span> value_type<span class='operator'>&amp;</span>;
    <span class='keyword'>using</span> size_type              <span class='operator'>=</span> <a class='index' id=':type_of_map::size_type'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> difference_type        <span class='operator'>=</span> <a class='index' id=':type_of_map::difference_type'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> iterator               <span class='operator'>=</span> <a class='index' id=':type_of_map::iterator'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> const_iterator         <span class='operator'>=</span> <a class='index' id=':type_of_map::const_iterator'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> reverse_iterator       <span class='operator'>=</span> std<span class='operator'>::</span>reverse_iterator<span class='anglebracket'>&lt;</span>iterator<span class='anglebracket'>&gt;</span>;
    <span class='keyword'>using</span> const_reverse_iterator <span class='operator'>=</span> std<span class='operator'>::</span>reverse_iterator<span class='anglebracket'>&lt;</span>const_iterator<span class='anglebracket'>&gt;</span>;
    <span class='keyword'>using</span> node_type              <span class='operator'>=</span> <i ><span class='texttt'>unspecified</span></i>;
    <span class='keyword'>using</span> insert_return_type     <span class='operator'>=</span> <i >insert-return-type</i><span class='anglebracket'>&lt;</span>iterator, node_type<span class='anglebracket'>&gt;</span>;

    <span class='keyword'>class</span> value_compare <span class='curlybracket'>{</span>
      <span class='keyword'>friend</span> <span class='keyword'>class</span> map;
    <span class='keyword'>protected</span><span class='operator'>:</span>
      Compare comp;
      <span class="added keyword">constexpr</span> value_compare<span class='parenthesis'>(</span>Compare c<span class='parenthesis'>)</span> <span class='operator'>:</span> comp<span class='parenthesis'>(</span>c<span class='parenthesis'>)</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>

    <span class='keyword'>public</span><span class='operator'>:</span>
      <span class="added keyword">constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span><span class='keyword'>const</span> value_type<span class='operator'>&amp;</span> x, <span class='keyword'>const</span> value_type<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='curlybracket'>{</span>
        <span class='keyword'>return</span> comp<span class='parenthesis'>(</span>x<span class='operator'>.</span>first, y<span class='operator'>.</span>first<span class='parenthesis'>)</span>;
      <span class='curlybracket'>}</span>
    <span class='curlybracket'>}</span>;

    <span class='comment'>// <a href='#map.cons' title='24.4.4.2&emsp;Constructors, copy, and assignment'>[map.<span class='shy'></span>cons]</a>, construct/copy/destroy</span>
    <span class="added keyword">constexpr</span> map<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>:</span> map<span class='parenthesis'>(</span>Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class="added keyword">constexpr</span> <span class='keyword'>explicit</span> map<span class='parenthesis'>(</span><span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="added keyword">constexpr</span> map<span class='parenthesis'>(</span>InputIterator first, InputIterator last,
          <span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="added keyword">constexpr</span> map<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> map<span class='parenthesis'>(</span><span class='keyword'>const</span> map<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> map<span class='parenthesis'>(</span>map<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>explicit</span> map<span class='parenthesis'>(</span><span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> map<span class='parenthesis'>(</span><span class='keyword'>const</span> map<span class='operator'>&amp;</span>, <span class='keyword'>const</span> type_identity_t<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> map<span class='parenthesis'>(</span>map<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, <span class='keyword'>const</span> type_identity_t<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> map<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span>,
      <span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
      <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="added keyword">constexpr</span> map<span class='parenthesis'>(</span>InputIterator first, InputIterator last, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>
        <span class='operator'>:</span> map<span class='parenthesis'>(</span>first, last, Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range_________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="added keyword">constexpr</span> map<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span><span class='parenthesis'>)</span>
        <span class='operator'>:</span> map<span class='parenthesis'>(</span>from_range, std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>rg<span class='parenthesis'>)</span>, Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class="added keyword">constexpr</span> map<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>
      <span class='operator'>:</span> map<span class='parenthesis'>(</span>il, Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class="added keyword">constexpr</span> <span class='operator'>~</span>map<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> map<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> map<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> map<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span>map<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>
      <span class='keyword'>noexcept</span><span class='parenthesis'>(</span>allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>is_always_equal<span class='operator'>::</span>value <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
               is_nothrow_move_assignable_v<span class='anglebracket'>&lt;</span>Compare<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> map<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> allocator_type get_allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// iterators</span>
    <span class="added keyword">constexpr</span> iterator               begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="added keyword">constexpr</span> const_iterator         begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="added keyword">constexpr</span> iterator               end<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="added keyword">constexpr</span> const_iterator         end<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class="added keyword">constexpr</span> reverse_iterator       rbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="added keyword">constexpr</span> const_reverse_iterator rbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="added keyword">constexpr</span> reverse_iterator       rend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="added keyword">constexpr</span> const_reverse_iterator rend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class="added keyword">constexpr</span> const_iterator         cbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="added keyword">constexpr</span> const_iterator         cend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="added keyword">constexpr</span> const_reverse_iterator crbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="added keyword">constexpr</span> const_reverse_iterator crend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// capacity</span>
    <span class="added keyword">constexpr</span> <span class='keyword'>bool</span> empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="added keyword">constexpr</span> size_type size<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="added keyword">constexpr</span> size_type max_size<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// <a href='#map.access' title='24.4.4.3&emsp;Element access'>[map.<span class='shy'></span>access]</a>, element access</span>
    <span class="added keyword">constexpr</span> mapped_type<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='squarebracket'>[</span><span class='squarebracket'>]</span><span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> mapped_type<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='squarebracket'>[</span><span class='squarebracket'>]</span><span class='parenthesis'>(</span>key_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="added keyword">constexpr</span> mapped_type<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='squarebracket'>[</span><span class='squarebracket'>]</span><span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> mapped_type<span class='operator'>&amp;</span>       at<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> <span class='keyword'>const</span> mapped_type<span class='operator'>&amp;</span> at<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="added keyword">constexpr</span> mapped_type<span class='operator'>&amp;</span>       at<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="added keyword">constexpr</span> <span class='keyword'>const</span> mapped_type<span class='operator'>&amp;</span> at<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// <a href='#map.modifiers' title='24.4.4.4&emsp;Modifiers'>[map.<span class='shy'></span>modifiers]</a>, modifiers</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span> <span class="added keyword">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> emplace<span class='parenthesis'>(</span>Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span> <span class="added keyword">constexpr</span> iterator emplace_hint<span class='parenthesis'>(</span>const_iterator position, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> <span class="added keyword">constexpr</span> insert<span class='parenthesis'>(</span><span class='keyword'>const</span> value_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> <span class="added keyword">constexpr</span> insert<span class='parenthesis'>(</span>value_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> P<span class='anglebracket'>&gt;</span> <span class="added keyword">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> insert<span class='parenthesis'>(</span>P<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, <span class='keyword'>const</span> value_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, value_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> P<span class='anglebracket'>&gt;</span>
      <span class="added keyword">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, P<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="added keyword">constexpr</span> <span class='keyword'>void</span> insert<span class='parenthesis'>(</span>InputIterator first, InputIterator last<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range__________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="added keyword">constexpr</span> <span class='keyword'>void</span> insert_range<span class='parenthesis'>(</span>R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> <span class='keyword'>void</span> insert<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;

    <span class="added keyword">constexpr</span> node_type extract<span class='parenthesis'>(</span>const_iterator position<span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> node_type extract<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="added keyword">constexpr</span> node_type extract<span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> insert_return_type insert<span class='parenthesis'>(</span>node_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> nh<span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> iterator           insert<span class='parenthesis'>(</span>const_iterator hint, node_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> nh<span class='parenthesis'>)</span>;

    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
      <span class="added keyword">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> try_emplace<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
      <span class="added keyword">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> try_emplace<span class='parenthesis'>(</span>key_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K, <span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
      <span class="added keyword">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> try_emplace<span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
      <span class="added keyword">constexpr</span> iterator try_emplace<span class='parenthesis'>(</span>const_iterator hint, <span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
      <span class="added keyword">constexpr</span> iterator try_emplace<span class='parenthesis'>(</span>const_iterator hint, key_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K, <span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
      <span class="added keyword">constexpr</span> iterator try_emplace<span class='parenthesis'>(</span>const_iterator hint, K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> M<span class='anglebracket'>&gt;</span>
      <span class="added keyword">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> insert_or_assign<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k, M<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> M<span class='anglebracket'>&gt;</span>
      <span class="added keyword">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> insert_or_assign<span class='parenthesis'>(</span>key_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, M<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K, <span class='keyword'>class</span> M<span class='anglebracket'>&gt;</span>
      <span class="added keyword">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> insert_or_assign<span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, M<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> M<span class='anglebracket'>&gt;</span>
      <span class="added keyword">constexpr</span> iterator insert_or_assign<span class='parenthesis'>(</span>const_iterator hint, <span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k, M<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> M<span class='anglebracket'>&gt;</span>
      <span class="added keyword">constexpr</span> iterator insert_or_assign<span class='parenthesis'>(</span>const_iterator hint, key_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, M<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K, <span class='keyword'>class</span> M<span class='anglebracket'>&gt;</span>
      <span class="added keyword">constexpr</span> iterator insert_or_assign<span class='parenthesis'>(</span>const_iterator hint, K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, M<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;

    <span class="added keyword">constexpr</span> iterator  erase<span class='parenthesis'>(</span>iterator position<span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> iterator  erase<span class='parenthesis'>(</span>const_iterator position<span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> size_type erase<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="added keyword">constexpr</span> size_type erase<span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> iterator  erase<span class='parenthesis'>(</span>const_iterator first, const_iterator last<span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> <span class='keyword'>void</span>      swap<span class='parenthesis'>(</span>map<span class='operator'>&amp;</span><span class='parenthesis'>)</span>
      <span class='keyword'>noexcept</span><span class='parenthesis'>(</span>allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>is_always_equal<span class='operator'>::</span>value <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
               is_nothrow_swappable_v<span class='anglebracket'>&lt;</span>Compare<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> <span class='keyword'>void</span>      clear<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;

    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> C2<span class='anglebracket'>&gt;</span>
      <span class="added keyword">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>map<span class='anglebracket'>&lt;</span>Key, T, C2, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> source<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> C2<span class='anglebracket'>&gt;</span>
      <span class="added keyword">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>map<span class='anglebracket'>&lt;</span>Key, T, C2, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span><span class='operator'>&amp;</span> source<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> C2<span class='anglebracket'>&gt;</span>
      <span class="added keyword">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>multimap<span class='anglebracket'>&lt;</span>Key, T, C2, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> source<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> C2<span class='anglebracket'>&gt;</span>
      <span class="added keyword">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>multimap<span class='anglebracket'>&lt;</span>Key, T, C2, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span><span class='operator'>&amp;</span> source<span class='parenthesis'>)</span>;

    <span class='comment'>// observers</span>
    <span class="added keyword">constexpr</span> key_compare key_comp<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="added keyword">constexpr</span> value_compare value_comp<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// map operations</span>
    <span class="added keyword">constexpr</span> iterator       find<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> const_iterator find<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="added keyword">constexpr</span> iterator       find<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="added keyword">constexpr</span> const_iterator find<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="added keyword">constexpr</span> size_type      count<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="added keyword">constexpr</span> size_type count<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="added keyword">constexpr</span> <span class='keyword'>bool</span>           contains<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="added keyword">constexpr</span> <span class='keyword'>bool</span> contains<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="added keyword">constexpr</span> iterator       lower_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> const_iterator lower_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="added keyword">constexpr</span> iterator       lower_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="added keyword">constexpr</span> const_iterator lower_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="added keyword">constexpr</span> iterator       upper_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> const_iterator upper_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="added keyword">constexpr</span> iterator       upper_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="added keyword">constexpr</span> const_iterator upper_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="added keyword">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, iterator<span class='anglebracket'>&gt;</span>               equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="added keyword">constexpr</span> pair<span class='anglebracket'>&lt;</span>const_iterator, const_iterator<span class='anglebracket'>&gt;</span>   equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span>
      <span class="added keyword">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, iterator<span class='anglebracket'>&gt;</span>             equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span>
      <span class="added keyword">constexpr</span> pair<span class='anglebracket'>&lt;</span>const_iterator, const_iterator<span class='anglebracket'>&gt;</span> equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
  <span class='curlybracket'>}</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span><i >iter-key-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span><i >iter-to-alloc-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    map<span class='parenthesis'>(</span>InputIterator, InputIterator, Compare <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, Allocator <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> map<span class='anglebracket'>&lt;</span><i >iter-key-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>, <i >iter-mapped-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>, Compare, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range________'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span><i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span><i >range-to-alloc-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    map<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, Compare <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, Allocator <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> map<span class='anglebracket'>&lt;</span><i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, <i >range-mapped-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, Compare, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span>pair<span class='anglebracket'>&lt;</span><span class='keyword'>const</span> Key, T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    map<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>pair<span class='anglebracket'>&lt;</span>Key, T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>, Compare <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, Allocator <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> map<span class='anglebracket'>&lt;</span>Key, T, Compare, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    map<span class='parenthesis'>(</span>InputIterator, InputIterator, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> map<span class='anglebracket'>&lt;</span><i >iter-key-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>, <i >iter-mapped-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>,
             less<span class='anglebracket'>&lt;</span><i >iter-key-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range_________'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    map<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> map<span class='anglebracket'>&lt;</span><i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, <i >range-mapped-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, less<span class='anglebracket'>&lt;</span><i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    map<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>pair<span class='anglebracket'>&lt;</span>Key, T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>, Allocator<span class='parenthesis'>)</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> map<span class='anglebracket'>&lt;</span>Key, T, less<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>}</span>
</span></span></span></span></span></div></div></div><div id='map.cons' class='section'><h4 ><a class='secnum' href='#map.cons' style='min-width:95pt'>24.4.4.2</a> Constructors, copy, and assignment <a class='abbr_ref' href='map.cons'>[map.cons]</a></h4><div class='texpara'><a class='index' id='lib:map,operator==_'></a><a class='index' id='lib:operator==,map'></a><a class='index' id='lib:map,operator<'></a><a class='index' id='lib:operator<,map'></a></div><div class='texpara'><div id='lib:map,constructor________'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:map,constructor________'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> map<span class='parenthesis'>(</span><span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='map.cons-1'><div class='marginalizedparent'><a class='marginalized' href='#map.cons-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10586'>#</a></div><div class='texpara'><div id='map.cons-1.sentence-1' class='sentence'><i >Effects</i>: Constructs an empty
<span class='texttt'>map</span>
using the specified comparison object and allocator<a class='hidden_link' href='#map.cons-1.sentence-1'>.</a></div></div></div></div><div class='para' id='map.cons-2'><div class='marginalizedparent'><a class='marginalized' href='#map.cons-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10592'>#</a></div><div class='texpara'><div id='map.cons-2.sentence-1' class='sentence'><i >Complexity</i>: Constant<a class='hidden_link' href='#map.cons-2.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:map,constructor_________'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:map,constructor_________'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> map<span class='parenthesis'>(</span>InputIterator first, InputIterator last,
      <span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='map.cons-3'><div class='marginalizedparent'><a class='marginalized' href='#map.cons-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10605'>#</a></div><div class='texpara'><div id='map.cons-3.sentence-1' class='sentence'><i >Effects</i>: Constructs an empty
<span class='texttt'>map</span>
using the specified comparison object and allocator,
and inserts elements from the range
[<span class='texttt'>first, last</span>)<a class='hidden_link' href='#map.cons-3.sentence-1'>.</a></div></div></div></div><div class='para' id='map.cons-4'><div class='marginalizedparent'><a class='marginalized' href='#map.cons-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10613'>#</a></div><div class='texpara'><div id='map.cons-4.sentence-1' class='sentence'><i >Complexity</i>: Linear in <span class='math'><span class='mathalpha'>N</span></span> if the range
[<span class='texttt'>first, last</span>)
is already sorted with respect to <span class='texttt'>comp</span>
and otherwise <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.085em;">N</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">log</span></span><span class="mjx-mo"><span class="mjx-char"></span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.085em;">N</span></span></span></span></span></span>, where <span class='math'><span class='mathalpha'>N</span></span>
is <span class='texttt'>last <span class='operator'>-</span> first</span><a class='hidden_link' href='#map.cons-4.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:map,constructor__________'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:map,constructor__________'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range___________________________________________________'><span class='texttt'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> map<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='map.cons-5'><div class='marginalizedparent'><a class='marginalized' href='#map.cons-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10629'>#</a></div><div class='texpara'><div id='map.cons-5.sentence-1' class='sentence'><i >Effects</i>: Constructs an empty <span class='texttt'>map</span>
using the specified comparison object and allocator,
and inserts elements from the range <span class='texttt'>rg</span><a class='hidden_link' href='#map.cons-5.sentence-1'>.</a></div></div></div></div><div class='para' id='map.cons-6'><div class='marginalizedparent'><a class='marginalized' href='#map.cons-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10635'>#</a></div><div class='texpara'><div id='map.cons-6.sentence-1' class='sentence'><i >Complexity</i>: Linear in <span class='math'><span class='mathalpha'>N</span></span> if <span class='texttt'>rg</span> is already sorted with respect to <span class='texttt'>comp</span> and
otherwise <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.085em;">N</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">log</span></span><span class="mjx-mo"><span class="mjx-char"></span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.085em;">N</span></span></span></span></span></span>, where <span class='math'><span class='mathalpha'>N</span></span> is <span class='texttt'>ranges<span class='operator'>&#x200b;::&#x200b;</span>distance<span class='parenthesis'>(</span>rg<span class='parenthesis'>)</span></span><a class='hidden_link' href='#map.cons-6.sentence-1'>.</a></div></div></div></div></div><div id='map.access' class='section'><h4 ><a class='secnum' href='#map.access' style='min-width:95pt'>24.4.4.3</a> Element access <a class='abbr_ref' href='map.access'>[map.access]</a></h4><div class='texpara'><div id='lib:operator[],map'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator%5b%5d,map'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> mapped_type<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='squarebracket'>[</span><span class='squarebracket'>]</span><span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='map.access-1'><div class='marginalizedparent'><a class='marginalized' href='#map.access-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10649'>#</a></div><div class='texpara'><div id='map.access-1.sentence-1' class='sentence'><i >Effects</i>: Equivalent to: <span class='texttt'><span class='keyword'>return</span> try_<span class='shy'></span>emplace<span class='parenthesis'>(</span>x<span class='parenthesis'>)</span><span class='operator'>.</span>first<span class='operator'>-</span><span class='anglebracket'>&gt;</span>second;</span></div></div></div></div><div class='texpara'><div id='lib:operator[],map_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator%5b%5d,map_'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> mapped_type<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='squarebracket'>[</span><span class='squarebracket'>]</span><span class='parenthesis'>(</span>key_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='map.access-2'><div class='marginalizedparent'><a class='marginalized' href='#map.access-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10660'>#</a></div><div class='texpara'><div id='map.access-2.sentence-1' class='sentence'><i >Effects</i>: Equivalent to: <span class='texttt'><span class='keyword'>return</span> try_<span class='shy'></span>emplace<span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>move<span class='parenthesis'>(</span>x<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='operator'>.</span>first<span class='operator'>-</span><span class='anglebracket'>&gt;</span>second;</span></div></div></div></div><div class='texpara'><div id='lib:operator[],map__'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator%5b%5d,map__'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> mapped_type<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='squarebracket'>[</span><span class='squarebracket'>]</span><span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='map.access-3'><div class='marginalizedparent'><a class='marginalized' href='#map.access-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10671'>#</a></div><div class='texpara'><div id='map.access-3.sentence-1' class='sentence'><i >Constraints</i>: The <a href='expr.prim.id.qual#nt:qualified-id' title='7.5.5.3&emsp;Qualified names&emsp;[expr.prim.id.qual]'><span id='ntref:qualified-id______'><span class='textsf'><i >qualified-id</i></span></span></a> <span class='texttt'>Compare<span class='operator'>&#x200b;::&#x200b;</span>is_<span class='shy'></span>transparent</span>
is valid and denotes a type<a class='hidden_link' href='#map.access-3.sentence-1'>.</a></div></div></div></div><div class='para' id='map.access-4'><div class='marginalizedparent'><a class='marginalized' href='#map.access-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10676'>#</a></div><div class='texpara'><div id='map.access-4.sentence-1' class='sentence'><i >Effects</i>: Equivalent to: <span class='texttt'><span class='keyword'>return</span> try_<span class='shy'></span>emplace<span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>K<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>x<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='operator'>.</span>first<span class='operator'>-</span><span class='anglebracket'>&gt;</span>second;</span></div></div></div></div><div class='texpara'><div id='lib:map,at'><div id='lib:at,map'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:at,map'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> mapped_type<span class='operator'>&amp;</span>       at<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
<span class="keyword added">constexpr</span> <span class='keyword'>const</span> mapped_type<span class='operator'>&amp;</span> at<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para' id='map.access-5'><div class='marginalizedparent'><a class='marginalized' href='#map.access-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10688'>#</a></div><div class='texpara'><div id='map.access-5.sentence-1' class='sentence'><i >Returns</i>: A reference to the <span class='texttt'>mapped_<span class='shy'></span>type</span> corresponding to <span class='texttt'>x</span> in <span class='texttt'><span class='operator'>*</span><span class='keyword'>this</span></span><a class='hidden_link' href='#map.access-5.sentence-1'>.</a></div></div></div></div><div class='para' id='map.access-6'><div class='marginalizedparent'><a class='marginalized' href='#map.access-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10692'>#</a></div><div class='texpara'><div id='map.access-6.sentence-1' class='sentence'><i >Throws</i>: An exception object of type <span class='texttt'>out_<span class='shy'></span>of_<span class='shy'></span>range</span> if
no such element is present<a class='hidden_link' href='#map.access-6.sentence-1'>.</a></div></div></div></div><div class='para' id='map.access-7'><div class='marginalizedparent'><a class='marginalized' href='#map.access-7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10697'>#</a></div><div class='texpara'><div id='map.access-7.sentence-1' class='sentence'><i >Complexity</i>: Logarithmic<a class='hidden_link' href='#map.access-7.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:map,at_'><div id='lib:at,map_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:at,map_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> mapped_type<span class='operator'>&amp;</span>       at<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> <span class='keyword'>const</span> mapped_type<span class='operator'>&amp;</span> at<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para' id='map.access-8'><div class='marginalizedparent'><a class='marginalized' href='#map.access-8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10709'>#</a></div><div class='texpara'><div id='map.access-8.sentence-1' class='sentence'><i >Constraints</i>: The <a href='expr.prim.id.qual#nt:qualified-id' title='7.5.5.3&emsp;Qualified names&emsp;[expr.prim.id.qual]'><span id='ntref:qualified-id_______'><span class='textsf'><i >qualified-id</i></span></span></a> <span class='texttt'>Compare<span class='operator'>&#x200b;::&#x200b;</span>is_<span class='shy'></span>transparent</span>
is valid and denotes a type<a class='hidden_link' href='#map.access-8.sentence-1'>.</a></div></div></div></div><div class='para' id='map.access-9'><div class='marginalizedparent'><a class='marginalized' href='#map.access-9'>9</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10714'>#</a></div><div class='texpara'><div id='map.access-9.sentence-1' class='sentence'><i >Preconditions</i>: The expression <span class='texttt'>find<span class='parenthesis'>(</span>x<span class='parenthesis'>)</span></span> is well-formed and has well-defined behavior<a class='hidden_link' href='#map.access-9.sentence-1'>.</a></div></div></div></div><div class='para' id='map.access-10'><div class='marginalizedparent'><a class='marginalized' href='#map.access-10'>10</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10718'>#</a></div><div class='texpara'><div id='map.access-10.sentence-1' class='sentence'><i >Returns</i>: A reference to <span class='texttt'>find<span class='parenthesis'>(</span>x<span class='parenthesis'>)</span><span class='operator'>-</span><span class='anglebracket'>&gt;</span>second</span><a class='hidden_link' href='#map.access-10.sentence-1'>.</a></div></div></div></div><div class='para' id='map.access-11'><div class='marginalizedparent'><a class='marginalized' href='#map.access-11'>11</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10722'>#</a></div><div class='texpara'><div id='map.access-11.sentence-1' class='sentence'><i >Throws</i>: An exception object of type <span class='texttt'>out_<span class='shy'></span>of_<span class='shy'></span>range</span> if
<span class='texttt'>find<span class='parenthesis'>(</span>x<span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> end<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#map.access-11.sentence-1'>.</a></div></div></div></div><div class='para' id='map.access-12'><div class='marginalizedparent'><a class='marginalized' href='#map.access-12'>12</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10727'>#</a></div><div class='texpara'><div id='map.access-12.sentence-1' class='sentence'><i >Complexity</i>: Logarithmic<a class='hidden_link' href='#map.access-12.sentence-1'>.</a></div></div></div></div></div><div id='map.modifiers' class='section'><h4 ><a class='secnum' href='#map.modifiers' style='min-width:95pt'>24.4.4.4</a> Modifiers <a class='abbr_ref' href='map.modifiers'>[map.modifiers]</a></h4><div class='texpara'><div id='lib:map,insert__________'><div id='lib:insert,map'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:insert,map'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> P<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> insert<span class='parenthesis'>(</span>P<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> P<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, P<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='map.modifiers-1'><div class='marginalizedparent'><a class='marginalized' href='#map.modifiers-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10743'>#</a></div><div class='texpara'><div id='map.modifiers-1.sentence-1' class='sentence'><i >Constraints</i>: <span class='texttt'>is_<span class='shy'></span>constructible_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>value_<span class='shy'></span>type, P<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#map.modifiers-1.sentence-1'>.</a></div></div></div></div><div class='para' id='map.modifiers-2'><div class='marginalizedparent'><a class='marginalized' href='#map.modifiers-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10747'>#</a></div><div class='texpara'><div id='map.modifiers-2.sentence-1' class='sentence'><i >Effects</i>: The first form is equivalent to
<span class='texttt'><span class='keyword'>return</span> emplace<span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>P<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>x<span class='parenthesis'>)</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#map.modifiers-2.sentence-1'>.</a></div> <div id='map.modifiers-2.sentence-2' class='sentence'>The second form is
equivalent to <span class='texttt'><span class='keyword'>return</span> emplace_<span class='shy'></span>hint<span class='parenthesis'>(</span>position, std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>P<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>x<span class='parenthesis'>)</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#map.modifiers-2.sentence-2'>.</a></div></div></div></div><div class='texpara'><div id='lib:map,try_emplace'><div id='lib:try_emplace,map'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:try_emplace,map'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> try_emplace<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> iterator try_emplace<span class='parenthesis'>(</span>const_iterator hint, <span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='map.modifiers-3'><div class='marginalizedparent'><a class='marginalized' href='#map.modifiers-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10763'>#</a></div><div class='texpara'><div id='map.modifiers-3.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>value_<span class='shy'></span>type</span> is <i >Cpp17EmplaceConstructible</i> into <span class='texttt'>map</span>
from <span class='texttt'>piecewise_<span class='shy'></span>construct</span>, <span class='texttt'>forward_<span class='shy'></span>as_<span class='shy'></span>tuple<span class='parenthesis'>(</span>k<span class='parenthesis'>)</span></span>,
<span class='texttt'>forward_<span class='shy'></span>as_<span class='shy'></span>tuple<span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>Args<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>args<span class='parenthesis'>)</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#map.modifiers-3.sentence-1'>.</a></div></div></div></div><div class='para' id='map.modifiers-4'><div class='marginalizedparent'><a class='marginalized' href='#map.modifiers-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10769'>#</a></div><div class='texpara'><div id='map.modifiers-4.sentence-1' class='sentence'><i >Effects</i>: If the map already contains an element
whose key is equivalent to <span class='texttt'>k</span>,
there is no effect<a class='hidden_link' href='#map.modifiers-4.sentence-1'>.</a></div> <div id='map.modifiers-4.sentence-2' class='sentence'>Otherwise inserts an object of type <span class='texttt'>value_<span class='shy'></span>type</span>
constructed with <span class='texttt'>piecewise_<span class='shy'></span>construct</span>, <span class='texttt'>forward_<span class='shy'></span>as_<span class='shy'></span>tuple<span class='parenthesis'>(</span>k<span class='parenthesis'>)</span></span>,
<span class='texttt'>forward_<span class='shy'></span>as_<span class='shy'></span>tuple<span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>Args<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>args<span class='parenthesis'>)</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#map.modifiers-4.sentence-2'>.</a></div></div></div></div><div class='para' id='map.modifiers-5'><div class='marginalizedparent'><a class='marginalized' href='#map.modifiers-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10778'>#</a></div><div class='texpara'><div id='map.modifiers-5.sentence-1' class='sentence'><i >Returns</i>: In the first overload,
the <span class='texttt'><span class='keyword'>bool</span></span> component of the returned pair is <span class='texttt'><span class='literal'>true</span></span>
if and only if the insertion took place<a class='hidden_link' href='#map.modifiers-5.sentence-1'>.</a></div> <div id='map.modifiers-5.sentence-2' class='sentence'>The returned iterator points to the map element
whose key is equivalent to <span class='texttt'>k</span><a class='hidden_link' href='#map.modifiers-5.sentence-2'>.</a></div></div></div></div><div class='para' id='map.modifiers-6'><div class='marginalizedparent'><a class='marginalized' href='#map.modifiers-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10786'>#</a></div><div class='texpara'><div id='map.modifiers-6.sentence-1' class='sentence'><i >Complexity</i>: The same as <span class='texttt'>emplace</span> and <span class='texttt'>emplace_<span class='shy'></span>hint</span>,
respectively<a class='hidden_link' href='#map.modifiers-6.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:map,try_emplace_'><div id='lib:try_emplace,map_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:try_emplace,map_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> try_emplace<span class='parenthesis'>(</span>key_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> iterator try_emplace<span class='parenthesis'>(</span>const_iterator hint, key_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='map.modifiers-7'><div class='marginalizedparent'><a class='marginalized' href='#map.modifiers-7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10801'>#</a></div><div class='texpara'><div id='map.modifiers-7.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>value_<span class='shy'></span>type</span> is <i >Cpp17EmplaceConstructible</i> into <span class='texttt'>map</span>
from <span class='texttt'>piecewise_<span class='shy'></span>construct</span>, <span class='texttt'>forward_<span class='shy'></span>as_<span class='shy'></span>tuple<span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>move<span class='parenthesis'>(</span>k<span class='parenthesis'>)</span><span class='parenthesis'>)</span></span>,
<span class='texttt'>forward_<span class='shy'></span>as_<span class='shy'></span>tuple<span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>Args<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>args<span class='parenthesis'>)</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#map.modifiers-7.sentence-1'>.</a></div></div></div></div><div class='para' id='map.modifiers-8'><div class='marginalizedparent'><a class='marginalized' href='#map.modifiers-8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10807'>#</a></div><div class='texpara'><div id='map.modifiers-8.sentence-1' class='sentence'><i >Effects</i>: If the map already contains an element
whose key is equivalent to <span class='texttt'>k</span>,
there is no effect<a class='hidden_link' href='#map.modifiers-8.sentence-1'>.</a></div> <div id='map.modifiers-8.sentence-2' class='sentence'>Otherwise inserts an object of type <span class='texttt'>value_<span class='shy'></span>type</span>
constructed with <span class='texttt'>piecewise_<span class='shy'></span>construct</span>, <span class='texttt'>forward_<span class='shy'></span>as_<span class='shy'></span>tuple<span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>move<span class='parenthesis'>(</span>k<span class='parenthesis'>)</span><span class='parenthesis'>)</span></span>,
<span class='texttt'>forward_<span class='shy'></span>as_<span class='shy'></span>tuple<span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>Args<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>args<span class='parenthesis'>)</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#map.modifiers-8.sentence-2'>.</a></div></div></div></div><div class='para' id='map.modifiers-9'><div class='marginalizedparent'><a class='marginalized' href='#map.modifiers-9'>9</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10816'>#</a></div><div class='texpara'><div id='map.modifiers-9.sentence-1' class='sentence'><i >Returns</i>: In the first overload,
the <span class='texttt'><span class='keyword'>bool</span></span> component of the returned pair is <span class='texttt'><span class='literal'>true</span></span>
if and only if the insertion took place<a class='hidden_link' href='#map.modifiers-9.sentence-1'>.</a></div> <div id='map.modifiers-9.sentence-2' class='sentence'>The returned iterator points to the map element
whose key is equivalent to <span class='texttt'>k</span><a class='hidden_link' href='#map.modifiers-9.sentence-2'>.</a></div></div></div></div><div class='para' id='map.modifiers-10'><div class='marginalizedparent'><a class='marginalized' href='#map.modifiers-10'>10</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10824'>#</a></div><div class='texpara'><div id='map.modifiers-10.sentence-1' class='sentence'><i >Complexity</i>: The same as <span class='texttt'>emplace</span> and <span class='texttt'>emplace_<span class='shy'></span>hint</span>,
respectively<a class='hidden_link' href='#map.modifiers-10.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:map,try_emplace__'><div id='lib:try_emplace,map__'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:try_emplace,map__'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K, <span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> try_emplace<span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K, <span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> iterator try_emplace<span class='parenthesis'>(</span>const_iterator hint, K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='map.modifiers-11'><div class='marginalizedparent'><a class='marginalized' href='#map.modifiers-11'>11</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10839'>#</a></div><div class='texpara'><div id='map.modifiers-11.sentence-1' class='sentence'><i >Constraints</i>: The <a href='expr.prim.id.qual#nt:qualified-id' title='7.5.5.3&emsp;Qualified names&emsp;[expr.prim.id.qual]'><span id='ntref:qualified-id________'><span class='textsf'><i >qualified-id</i></span></span></a> <span class='texttt'>Compare<span class='operator'>&#x200b;::&#x200b;</span>is_<span class='shy'></span>transparent</span>
is valid and denotes a type<a class='hidden_link' href='#map.modifiers-11.sentence-1'>.</a></div> <div id='map.modifiers-11.sentence-2' class='sentence'>For the first overload,
<span class='texttt'>is_<span class='shy'></span>convertible_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, const_<span class='shy'></span>iterator<span class='anglebracket'>&gt;</span></span> and
<span class='texttt'>is_<span class='shy'></span>convertible_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, iterator<span class='anglebracket'>&gt;</span></span>
are both <span class='texttt'><span class='literal'>false</span></span><a class='hidden_link' href='#map.modifiers-11.sentence-2'>.</a></div></div></div></div><div class='para' id='map.modifiers-12'><div class='marginalizedparent'><a class='marginalized' href='#map.modifiers-12'>12</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10848'>#</a></div><div class='texpara'><div id='map.modifiers-12.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>value_<span class='shy'></span>type</span> is <i >Cpp17EmplaceConstructible</i> into <span class='texttt'>map</span> from
<span class='texttt'>piecewise_<span class='shy'></span>construct, forward_<span class='shy'></span>as_<span class='shy'></span>tuple<span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>K<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>k<span class='parenthesis'>)</span><span class='parenthesis'>)</span>,
forward_<span class='shy'></span>as_<span class='shy'></span>tuple<span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>Args<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>args<span class='parenthesis'>)</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#map.modifiers-12.sentence-1'>.</a></div></div></div></div><div class='para' id='map.modifiers-13'><div class='marginalizedparent'><a class='marginalized' href='#map.modifiers-13'>13</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10854'>#</a></div><div class='texpara'><div id='map.modifiers-13.sentence-1' class='sentence'><i >Effects</i>: If the map already contains an element whose key is equivalent to <span class='texttt'>k</span>,
there is no effect<a class='hidden_link' href='#map.modifiers-13.sentence-1'>.</a></div> <div id='map.modifiers-13.sentence-2' class='sentence'>Otherwise, let <span class='texttt'>r</span> be <span class='texttt'>equal_<span class='shy'></span>range<span class='parenthesis'>(</span>k<span class='parenthesis'>)</span></span><a class='hidden_link' href='#map.modifiers-13.sentence-2'>.</a></div> <div id='map.modifiers-13.sentence-3' class='sentence'>Constructs an object <span class='texttt'>u</span> of type <span class='texttt'>value_<span class='shy'></span>type</span> with
<span class='texttt'>piecewise_<span class='shy'></span>construct, forward_<span class='shy'></span>as_<span class='shy'></span>tuple<span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>K<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>k<span class='parenthesis'>)</span><span class='parenthesis'>)</span>,
forward_<span class='shy'></span>as_<span class='shy'></span>tuple<span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>Args<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>args<span class='parenthesis'>)</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#map.modifiers-13.sentence-3'>.</a></div> <div id='map.modifiers-13.sentence-4' class='sentence'>If <span class='texttt'>equal_<span class='shy'></span>range<span class='parenthesis'>(</span>u<span class='operator'>.</span>first<span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> r</span> is <span class='texttt'><span class='literal'>false</span></span>,
the behavior is undefined<a class='hidden_link' href='#map.modifiers-13.sentence-4'>.</a></div> <div id='map.modifiers-13.sentence-5' class='sentence'>Inserts <span class='texttt'>u</span> into <span class='texttt'><span class='operator'>*</span><span class='keyword'>this</span></span><a class='hidden_link' href='#map.modifiers-13.sentence-5'>.</a></div></div></div></div><div class='para' id='map.modifiers-14'><div class='marginalizedparent'><a class='marginalized' href='#map.modifiers-14'>14</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10866'>#</a></div><div class='texpara'><div id='map.modifiers-14.sentence-1' class='sentence'><i >Returns</i>: For the first overload,
the <span class='texttt'><span class='keyword'>bool</span></span> component of the returned pair is <span class='texttt'><span class='literal'>true</span></span>
if and only if the insertion took place<a class='hidden_link' href='#map.modifiers-14.sentence-1'>.</a></div> <div id='map.modifiers-14.sentence-2' class='sentence'>The returned iterator points to the map element
whose key is equivalent to <span class='texttt'>k</span><a class='hidden_link' href='#map.modifiers-14.sentence-2'>.</a></div></div></div></div><div class='para' id='map.modifiers-15'><div class='marginalizedparent'><a class='marginalized' href='#map.modifiers-15'>15</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10874'>#</a></div><div class='texpara'><div id='map.modifiers-15.sentence-1' class='sentence'><i >Complexity</i>: The same as <span class='texttt'>emplace</span> and <span class='texttt'>emplace_<span class='shy'></span>hint</span>, respectively<a class='hidden_link' href='#map.modifiers-15.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:map,insert_or_assign'><div id='lib:insert_or_assign,map'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:insert_or_assign,map'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> M<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> insert_or_assign<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k, M<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> M<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> iterator insert_or_assign<span class='parenthesis'>(</span>const_iterator hint, <span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k, M<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='map.modifiers-16'><div class='marginalizedparent'><a class='marginalized' href='#map.modifiers-16'>16</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10888'>#</a></div><div class='texpara'><div id='map.modifiers-16.sentence-1' class='sentence'><i >Mandates</i>: <span class='texttt'>is_<span class='shy'></span>assignable_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>mapped_<span class='shy'></span>type<span class='operator'>&amp;</span>, M<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#map.modifiers-16.sentence-1'>.</a></div></div></div></div><div class='para' id='map.modifiers-17'><div class='marginalizedparent'><a class='marginalized' href='#map.modifiers-17'>17</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10892'>#</a></div><div class='texpara'><div id='map.modifiers-17.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>value_<span class='shy'></span>type</span> is <i >Cpp17EmplaceConstructible</i> into <span class='texttt'>map</span>
from <span class='texttt'>k</span>, <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>M<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>obj<span class='parenthesis'>)</span></span><a class='hidden_link' href='#map.modifiers-17.sentence-1'>.</a></div></div></div></div><div class='para' id='map.modifiers-18'><div class='marginalizedparent'><a class='marginalized' href='#map.modifiers-18'>18</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10897'>#</a></div><div class='texpara'><div id='map.modifiers-18.sentence-1' class='sentence'><i >Effects</i>: If the map already contains an element <span class='texttt'>e</span>
whose key is equivalent to <span class='texttt'>k</span>,
assigns <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>M<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>obj<span class='parenthesis'>)</span></span> to <span class='texttt'>e<span class='operator'>.</span>second</span><a class='hidden_link' href='#map.modifiers-18.sentence-1'>.</a></div> <div id='map.modifiers-18.sentence-2' class='sentence'>Otherwise inserts an object of type <span class='texttt'>value_<span class='shy'></span>type</span>
constructed with <span class='texttt'>k</span>, <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>M<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>obj<span class='parenthesis'>)</span></span><a class='hidden_link' href='#map.modifiers-18.sentence-2'>.</a></div></div></div></div><div class='para' id='map.modifiers-19'><div class='marginalizedparent'><a class='marginalized' href='#map.modifiers-19'>19</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10905'>#</a></div><div class='texpara'><div id='map.modifiers-19.sentence-1' class='sentence'><i >Returns</i>: In the first overload,
the <span class='texttt'><span class='keyword'>bool</span></span> component of the returned pair is <span class='texttt'><span class='literal'>true</span></span>
if and only if the insertion took place<a class='hidden_link' href='#map.modifiers-19.sentence-1'>.</a></div> <div id='map.modifiers-19.sentence-2' class='sentence'>The returned iterator points to the map element
whose key is equivalent to <span class='texttt'>k</span><a class='hidden_link' href='#map.modifiers-19.sentence-2'>.</a></div></div></div></div><div class='para' id='map.modifiers-20'><div class='marginalizedparent'><a class='marginalized' href='#map.modifiers-20'>20</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10913'>#</a></div><div class='texpara'><div id='map.modifiers-20.sentence-1' class='sentence'><i >Complexity</i>: The same as <span class='texttt'>emplace</span> and <span class='texttt'>emplace_<span class='shy'></span>hint</span>,
respectively<a class='hidden_link' href='#map.modifiers-20.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:map,insert_or_assign_'><div id='lib:insert_or_assign,map_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:insert_or_assign,map_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> M<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> insert_or_assign<span class='parenthesis'>(</span>key_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, M<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> M<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> iterator insert_or_assign<span class='parenthesis'>(</span>const_iterator hint, key_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, M<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='map.modifiers-21'><div class='marginalizedparent'><a class='marginalized' href='#map.modifiers-21'>21</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10928'>#</a></div><div class='texpara'><div id='map.modifiers-21.sentence-1' class='sentence'><i >Mandates</i>: <span class='texttt'>is_<span class='shy'></span>assignable_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>mapped_<span class='shy'></span>type<span class='operator'>&amp;</span>, M<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#map.modifiers-21.sentence-1'>.</a></div></div></div></div><div class='para' id='map.modifiers-22'><div class='marginalizedparent'><a class='marginalized' href='#map.modifiers-22'>22</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10932'>#</a></div><div class='texpara'><div id='map.modifiers-22.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>value_<span class='shy'></span>type</span> is <i >Cpp17EmplaceConstructible</i> into <span class='texttt'>map</span>
from <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>move<span class='parenthesis'>(</span>k<span class='parenthesis'>)</span></span>, <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>M<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>obj<span class='parenthesis'>)</span></span><a class='hidden_link' href='#map.modifiers-22.sentence-1'>.</a></div></div></div></div><div class='para' id='map.modifiers-23'><div class='marginalizedparent'><a class='marginalized' href='#map.modifiers-23'>23</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10937'>#</a></div><div class='texpara'><div id='map.modifiers-23.sentence-1' class='sentence'><i >Effects</i>: If the map already contains an element <span class='texttt'>e</span>
whose key is equivalent to <span class='texttt'>k</span>,
assigns <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>M<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>obj<span class='parenthesis'>)</span></span> to <span class='texttt'>e<span class='operator'>.</span>second</span><a class='hidden_link' href='#map.modifiers-23.sentence-1'>.</a></div> <div id='map.modifiers-23.sentence-2' class='sentence'>Otherwise inserts an object of type <span class='texttt'>value_<span class='shy'></span>type</span>
constructed with <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>&#x200b;move<span class='parenthesis'>(</span>k<span class='parenthesis'>)</span></span>, <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>M<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>obj<span class='parenthesis'>)</span></span><a class='hidden_link' href='#map.modifiers-23.sentence-2'>.</a></div></div></div></div><div class='para' id='map.modifiers-24'><div class='marginalizedparent'><a class='marginalized' href='#map.modifiers-24'>24</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10945'>#</a></div><div class='texpara'><div id='map.modifiers-24.sentence-1' class='sentence'><i >Returns</i>: In the first overload,
the <span class='texttt'><span class='keyword'>bool</span></span> component of the returned pair is <span class='texttt'><span class='literal'>true</span></span>
if and only if the insertion took place<a class='hidden_link' href='#map.modifiers-24.sentence-1'>.</a></div> <div id='map.modifiers-24.sentence-2' class='sentence'>The returned iterator points to the map element
whose key is equivalent to <span class='texttt'>k</span><a class='hidden_link' href='#map.modifiers-24.sentence-2'>.</a></div></div></div></div><div class='para' id='map.modifiers-25'><div class='marginalizedparent'><a class='marginalized' href='#map.modifiers-25'>25</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10953'>#</a></div><div class='texpara'><div id='map.modifiers-25.sentence-1' class='sentence'><i >Complexity</i>: The same as <span class='texttt'>emplace</span> and <span class='texttt'>emplace_<span class='shy'></span>hint</span>,
respectively<a class='hidden_link' href='#map.modifiers-25.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:map,insert_or_assign__'><div id='lib:insert_or_assign,map__'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:insert_or_assign,map__'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K, <span class='keyword'>class</span> M<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> insert_or_assign<span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, M<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K, <span class='keyword'>class</span> M<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> iterator insert_or_assign<span class='parenthesis'>(</span>const_iterator hint, K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, M<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='map.modifiers-26'><div class='marginalizedparent'><a class='marginalized' href='#map.modifiers-26'>26</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10968'>#</a></div><div class='texpara'><div id='map.modifiers-26.sentence-1' class='sentence'><i >Constraints</i>: The <a href='expr.prim.id.qual#nt:qualified-id' title='7.5.5.3&emsp;Qualified names&emsp;[expr.prim.id.qual]'><span id='ntref:qualified-id_________'><span class='textsf'><i >qualified-id</i></span></span></a> <span class='texttt'>Compare<span class='operator'>&#x200b;::&#x200b;</span>is_<span class='shy'></span>transparent</span>
is valid and denotes a type<a class='hidden_link' href='#map.modifiers-26.sentence-1'>.</a></div></div></div></div><div class='para' id='map.modifiers-27'><div class='marginalizedparent'><a class='marginalized' href='#map.modifiers-27'>27</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10973'>#</a></div><div class='texpara'><div id='map.modifiers-27.sentence-1' class='sentence'><i >Mandates</i>: <span class='texttt'>is_<span class='shy'></span>assignable_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>mapped_<span class='shy'></span>type<span class='operator'>&amp;</span>, M<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#map.modifiers-27.sentence-1'>.</a></div></div></div></div><div class='para' id='map.modifiers-28'><div class='marginalizedparent'><a class='marginalized' href='#map.modifiers-28'>28</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10977'>#</a></div><div class='texpara'><div id='map.modifiers-28.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>value_<span class='shy'></span>type</span> is <i >Cpp17EmplaceConstructible</i> into <span class='texttt'>map</span> from
<span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>K<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>k<span class='parenthesis'>)</span>, std<span class='operator'>&#x200b;::&#x200b;</span><br>forward<span class='anglebracket'>&lt;</span>M<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>obj<span class='parenthesis'>)</span></span><a class='hidden_link' href='#map.modifiers-28.sentence-1'>.</a></div></div></div></div><div class='para' id='map.modifiers-29'><div class='marginalizedparent'><a class='marginalized' href='#map.modifiers-29'>29</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10982'>#</a></div><div class='texpara'><div id='map.modifiers-29.sentence-1' class='sentence'><i >Effects</i>: If the map already contains an element <span class='texttt'>e</span>
whose key is equivalent to <span class='texttt'>k</span>,
assigns <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>M<span class='anglebracket'>&gt;</span><br><span class='parenthesis'>(</span>obj<span class='parenthesis'>)</span></span> to <span class='texttt'>e<span class='operator'>.</span>second</span><a class='hidden_link' href='#map.modifiers-29.sentence-1'>.</a></div> <div id='map.modifiers-29.sentence-2' class='sentence'>Otherwise, let <span class='texttt'>r</span> be <span class='texttt'>equal_<span class='shy'></span>range<span class='parenthesis'>(</span>k<span class='parenthesis'>)</span></span><a class='hidden_link' href='#map.modifiers-29.sentence-2'>.</a></div> <div id='map.modifiers-29.sentence-3' class='sentence'>Constructs an object <span class='texttt'>u</span> of type <span class='texttt'>value_<span class='shy'></span>type</span>
with <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>K<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>k<span class='parenthesis'>)</span>, std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>M<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>obj<span class='parenthesis'>)</span></span><a class='hidden_link' href='#map.modifiers-29.sentence-3'>.</a></div> <div id='map.modifiers-29.sentence-4' class='sentence'>If <span class='texttt'>equal_<span class='shy'></span>range<span class='parenthesis'>(</span>u<span class='operator'>.</span>first<span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> r</span> is <span class='texttt'><span class='literal'>false</span></span>,
the behavior is undefined<a class='hidden_link' href='#map.modifiers-29.sentence-4'>.</a></div> <div id='map.modifiers-29.sentence-5' class='sentence'>Inserts <span class='texttt'>u</span> into <span class='texttt'><span class='operator'>*</span><span class='keyword'>this</span></span><a class='hidden_link' href='#map.modifiers-29.sentence-5'>.</a></div></div></div></div><div class='para' id='map.modifiers-30'><div class='marginalizedparent'><a class='marginalized' href='#map.modifiers-30'>30</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L10994'>#</a></div><div class='texpara'><div id='map.modifiers-30.sentence-1' class='sentence'><i >Returns</i>: For the first overload,
the <span class='texttt'><span class='keyword'>bool</span></span> component of the returned pair is <span class='texttt'><span class='literal'>true</span></span>
if and only if the insertion took place<a class='hidden_link' href='#map.modifiers-30.sentence-1'>.</a></div> <div id='map.modifiers-30.sentence-2' class='sentence'>The returned iterator points to the map element
whose key is equivalent to <span class='texttt'>k</span><a class='hidden_link' href='#map.modifiers-30.sentence-2'>.</a></div></div></div></div><div class='para' id='map.modifiers-31'><div class='marginalizedparent'><a class='marginalized' href='#map.modifiers-31'>31</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L11002'>#</a></div><div class='texpara'><div id='map.modifiers-31.sentence-1' class='sentence'><i >Complexity</i>: The same as <span class='texttt'>emplace</span> and <span class='texttt'>emplace_<span class='shy'></span>hint</span>, respectively<a class='hidden_link' href='#map.modifiers-31.sentence-1'>.</a></div></div></div></div></div><div id='map.erasure' class='section'><h4 ><a class='secnum' href='#map.erasure' style='min-width:95pt'>24.4.4.5</a> Erasure <a class='abbr_ref' href='map.erasure'>[map.erasure]</a></h4><div class='texpara'><div id='lib:map,erase_if'><div id='lib:erase_if,map'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:erase_if,map'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> Allocator, <span class='keyword'>class</span> Predicate<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>typename</span> map<span class='anglebracket'>&lt;</span>Key, T, Compare, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>size_type
    erase_if<span class='parenthesis'>(</span>map<span class='anglebracket'>&lt;</span>Key, T, Compare, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> c, Predicate pred<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='map.erasure-1'><div class='marginalizedparent'><a class='marginalized' href='#map.erasure-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L11017'>#</a></div><div class='texpara'><div id='map.erasure-1.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>auto</span> original_size <span class='operator'>=</span> c<span class='operator'>.</span>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
<span class='keyword'>for</span> <span class='parenthesis'>(</span><span class='keyword'>auto</span> i <span class='operator'>=</span> c<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, last <span class='operator'>=</span> c<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>; i <span class='operator'>!</span><span class='operator'>=</span> last; <span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
  <span class='keyword'>if</span> <span class='parenthesis'>(</span>pred<span class='parenthesis'>(</span><span class='operator'>*</span>i<span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
    i <span class='operator'>=</span> c<span class='operator'>.</span>erase<span class='parenthesis'>(</span>i<span class='parenthesis'>)</span>;
  <span class='curlybracket'>}</span> <span class='keyword'>else</span> <span class='curlybracket'>{</span>
    <span class='operator'>+</span><span class='operator'>+</span>i;
  <span class='curlybracket'>}</span>
<span class='curlybracket'>}</span>
<span class='keyword'>return</span> original_size <span class='operator'>-</span> c<span class='operator'>.</span>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
</span></div></div></div></div></div></div><div id='multimap' class='section'><h3 ><a class='secnum' href='#multimap' style='min-width:80pt'>24.4.5</a> Class template <span class='texttt'>multimap</span> <a class='abbr_ref' href='multimap'>[multimap]</a></h3><div id='multimap.overview' class='section'><h4 ><a class='secnum' href='#multimap.overview' style='min-width:95pt'>24.4.5.1</a> Overview <a class='abbr_ref' href='multimap.overview'>[multimap.overview]</a></h4><div class='para' id='multimap.overview-1'><div class='marginalizedparent'><a class='marginalized' href='#multimap.overview-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L11037'>#</a></div><div class='texpara'><div id='multimap.overview-1.sentence-1' class='sentence'><a class='index' id='lib:multimap'></a>A
<span class='texttt'>multimap</span>
is an associative container that supports equivalent keys (i.e., possibly containing multiple copies of
the same key value) and provides for fast retrieval of values of another type
<span class='texttt'>T</span>
based on the keys<a class='hidden_link' href='#multimap.overview-1.sentence-1'>.</a></div> <div id='multimap.overview-1.sentence-2' class='sentence'>The
<span class='texttt'>multimap</span>
class
supports bidirectional iterators<a class='hidden_link' href='#multimap.overview-1.sentence-2'>.</a></div></div></div><div class='para' id='multimap.overview-2'><div class='marginalizedparent'><a class='marginalized' href='#multimap.overview-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L11050'>#</a></div><div class='texpara'><div id='multimap.overview-2.sentence-1' class='sentence'>A <span class='texttt'>multimap</span> meets all of the requirements
of a container (<a href='#container.reqmts' title='24.2.2.2&emsp;Container requirements'>[container.<span class='shy'></span>reqmts]</a>),
of a reversible container (<a href='#container.rev.reqmts' title='24.2.2.3&emsp;Reversible container requirements'>[container.<span class='shy'></span>rev.<span class='shy'></span>reqmts]</a>),
of an allocator-aware container (<a href='#container.alloc.reqmts' title='24.2.2.5&emsp;Allocator-aware containers'>[container.<span class='shy'></span>alloc.<span class='shy'></span>reqmts]</a>), and
of an associative container (<a href='#associative.reqmts' title='24.2.7&emsp;Associative containers'>[associative.<span class='shy'></span>reqmts]</a>)<a class='hidden_link' href='#multimap.overview-2.sentence-1'>.</a></div> <div id='multimap.overview-2.sentence-2' class='sentence'>A
<span class='texttt'>multimap</span>
also provides most operations described in <a href='#associative.reqmts' title='24.2.7&emsp;Associative containers'>[associative.<span class='shy'></span>reqmts]</a>
for equal keys<a class='hidden_link' href='#multimap.overview-2.sentence-2'>.</a></div> <div id='multimap.overview-2.sentence-3' class='sentence'>This means that a
<span class='texttt'>multimap</span>
supports the
<span class='texttt'>a_<span class='shy'></span>eq</span>
operations in <a href='#associative.reqmts' title='24.2.7&emsp;Associative containers'>[associative.<span class='shy'></span>reqmts]</a>
but not the
<span class='texttt'>a_<span class='shy'></span>uniq</span>
operations<a class='hidden_link' href='#multimap.overview-2.sentence-3'>.</a></div> <div id='multimap.overview-2.sentence-4' class='sentence'>For a
<span class='texttt'>multimap<span class='anglebracket'>&lt;</span>Key,T<span class='anglebracket'>&gt;</span></span>
the
<span class='texttt'>key_<span class='shy'></span>type</span>
is
<span class='texttt'>Key</span>
and the
<span class='texttt'>value_<span class='shy'></span>type</span>
is
<span class='texttt'>pair<span class='anglebracket'>&lt;</span><span class='keyword'>const</span> Key,T<span class='anglebracket'>&gt;</span></span><a class='hidden_link' href='#multimap.overview-2.sentence-4'>.</a></div> <div id='multimap.overview-2.sentence-5' class='sentence'>Descriptions are provided here only for operations on
<span class='texttt'>multimap</span>
that are not described in one of those tables
or for operations where there is additional semantic information<a class='hidden_link' href='#multimap.overview-2.sentence-5'>.</a></div></div>

<div class='para added' id='multimap.overview-3'><div class='marginalizedparent'><a class='marginalized' href='#multimap.overview-3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href=''>#</a></div>
<div class='texpara'>The types <span class="texttt">iterator</span> and <span class="texttt">const_iterator</span> meet the constexpr iterator requirements (<a href="iterator.requirements.general" title="25.3.1 General">[iterator.<span class="shy"></span>requirements.<span class="shy"></span>general]</a>).</div></div>

<div class='texpara'><span id='lib:multimap::value_compare,operator()'><span id='lib:operator(),multimap::value_compare'><span id='lib:multimap::value_compare,comp'><span id='lib:comp,multimap::value_compare'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:comp,multimap::value_compare'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span>pair<span class='anglebracket'>&lt;</span><span class='keyword'>const</span> Key, T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> multimap <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> key_type               <span class='operator'>=</span> Key;
    <span class='keyword'>using</span> mapped_type            <span class='operator'>=</span> T;
    <span class='keyword'>using</span> value_type             <span class='operator'>=</span> pair<span class='anglebracket'>&lt;</span><span class='keyword'>const</span> Key, T<span class='anglebracket'>&gt;</span>;
    <span class='keyword'>using</span> key_compare            <span class='operator'>=</span> Compare;
    <span class='keyword'>using</span> allocator_type         <span class='operator'>=</span> Allocator;
    <span class='keyword'>using</span> pointer                <span class='operator'>=</span> <span class='keyword'>typename</span> allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>pointer;
    <span class='keyword'>using</span> const_pointer          <span class='operator'>=</span> <span class='keyword'>typename</span> allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>const_pointer;
    <span class='keyword'>using</span> reference              <span class='operator'>=</span> value_type<span class='operator'>&amp;</span>;
    <span class='keyword'>using</span> const_reference        <span class='operator'>=</span> <span class='keyword'>const</span> value_type<span class='operator'>&amp;</span>;
    <span class='keyword'>using</span> size_type              <span class='operator'>=</span> <a class='index' id=':type_of_multimap::size_type'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> difference_type        <span class='operator'>=</span> <a class='index' id=':type_of_multimap::difference_type'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> iterator               <span class='operator'>=</span> <a class='index' id=':type_of_multimap::iterator'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> const_iterator         <span class='operator'>=</span> <a class='index' id=':type_of_multimap::const_iterator'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> reverse_iterator       <span class='operator'>=</span> std<span class='operator'>::</span>reverse_iterator<span class='anglebracket'>&lt;</span>iterator<span class='anglebracket'>&gt;</span>;
    <span class='keyword'>using</span> const_reverse_iterator <span class='operator'>=</span> std<span class='operator'>::</span>reverse_iterator<span class='anglebracket'>&lt;</span>const_iterator<span class='anglebracket'>&gt;</span>;
    <span class='keyword'>using</span> node_type              <span class='operator'>=</span> <i ><span class='texttt'>unspecified</span></i>;

    <span class='keyword'>class</span> value_compare <span class='curlybracket'>{</span>
      <span class='keyword'>friend</span> <span class='keyword'>class</span> multimap;
    <span class='keyword'>protected</span><span class='operator'>:</span>
      Compare comp;
      <span class="keyword added">constexpr</span> value_compare<span class='parenthesis'>(</span>Compare c<span class='parenthesis'>)</span> <span class='operator'>:</span> comp<span class='parenthesis'>(</span>c<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>

    <span class='keyword'>public</span><span class='operator'>:</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span><span class='keyword'>const</span> value_type<span class='operator'>&amp;</span> x, <span class='keyword'>const</span> value_type<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='curlybracket'>{</span>
        <span class='keyword'>return</span> comp<span class='parenthesis'>(</span>x<span class='operator'>.</span>first, y<span class='operator'>.</span>first<span class='parenthesis'>)</span>;
      <span class='curlybracket'>}</span>
    <span class='curlybracket'>}</span>;

    <span class='comment'>// <a href='#multimap.cons' title='24.4.5.2&emsp;Constructors'>[multimap.<span class='shy'></span>cons]</a>, construct/copy/destroy</span>
    <span class="keyword added">constexpr</span> multimap<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>:</span> multimap<span class='parenthesis'>(</span>Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> multimap<span class='parenthesis'>(</span><span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> multimap<span class='parenthesis'>(</span>InputIterator first, InputIterator last,
               <span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
               <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range____________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> multimap<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg,
               <span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> multimap<span class='parenthesis'>(</span><span class='keyword'>const</span> multimap<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> multimap<span class='parenthesis'>(</span>multimap<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> multimap<span class='parenthesis'>(</span><span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> multimap<span class='parenthesis'>(</span><span class='keyword'>const</span> multimap<span class='operator'>&amp;</span>, <span class='keyword'>const</span> type_identity_t<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> multimap<span class='parenthesis'>(</span>multimap<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, <span class='keyword'>const</span> type_identity_t<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> multimap<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span>,
      <span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
      <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> multimap<span class='parenthesis'>(</span>InputIterator first, InputIterator last, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>
        <span class='operator'>:</span> multimap<span class='parenthesis'>(</span>first, last, Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range_____________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> multimap<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span><span class='parenthesis'>)</span>
        <span class='operator'>:</span> multimap<span class='parenthesis'>(</span>from_range, std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>rg<span class='parenthesis'>)</span>, Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> multimap<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>
      <span class='operator'>:</span> multimap<span class='parenthesis'>(</span>il, Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> <span class='operator'>~</span>multimap<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> multimap<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> multimap<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> multimap<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span>multimap<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>
      <span class='keyword'>noexcept</span><span class='parenthesis'>(</span>allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>is_always_equal<span class='operator'>::</span>value <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
               is_nothrow_move_assignable_v<span class='anglebracket'>&lt;</span>Compare<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> multimap<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> allocator_type get_allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// iterators</span>
    <span class="keyword added">constexpr</span> iterator               begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator         begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> iterator               end<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator         end<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class="keyword added">constexpr</span> reverse_iterator       rbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_reverse_iterator rbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> reverse_iterator       rend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_reverse_iterator rend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class="keyword added">constexpr</span> const_iterator         cbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator         cend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_reverse_iterator crbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_reverse_iterator crend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// capacity</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> size_type size<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> size_type max_size<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// <a href='#multimap.modifiers' title='24.4.5.3&emsp;Modifiers'>[multimap.<span class='shy'></span>modifiers]</a>, modifiers</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator emplace<span class='parenthesis'>(</span>Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator emplace_hint<span class='parenthesis'>(</span>const_iterator position, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span><span class='keyword'>const</span> value_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>value_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> P<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>P<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, <span class='keyword'>const</span> value_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, value_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> P<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, P<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert<span class='parenthesis'>(</span>InputIterator first, InputIterator last<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range______________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert_range<span class='parenthesis'>(</span>R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> node_type extract<span class='parenthesis'>(</span>const_iterator position<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> node_type extract<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> node_type extract<span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>node_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> nh<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator hint, node_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> nh<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> iterator  erase<span class='parenthesis'>(</span>iterator position<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator  erase<span class='parenthesis'>(</span>const_iterator position<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> size_type erase<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> size_type erase<span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator  erase<span class='parenthesis'>(</span>const_iterator first, const_iterator last<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span>      swap<span class='parenthesis'>(</span>multimap<span class='operator'>&amp;</span><span class='parenthesis'>)</span>
      <span class='keyword'>noexcept</span><span class='parenthesis'>(</span>allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>is_always_equal<span class='operator'>::</span>value <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
               is_nothrow_swappable_v<span class='anglebracket'>&lt;</span>Compare<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span>      clear<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;

    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> C2<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>multimap<span class='anglebracket'>&lt;</span>Key, T, C2, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> source<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> C2<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>multimap<span class='anglebracket'>&lt;</span>Key, T, C2, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span><span class='operator'>&amp;</span> source<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> C2<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>map<span class='anglebracket'>&lt;</span>Key, T, C2, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> source<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> C2<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>map<span class='anglebracket'>&lt;</span>Key, T, C2, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span><span class='operator'>&amp;</span> source<span class='parenthesis'>)</span>;

    <span class='comment'>// observers</span>
    <span class="keyword added">constexpr</span> key_compare key_comp<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> value_compare value_comp<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// map operations</span>
    <span class="keyword added">constexpr</span> iterator       find<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> const_iterator find<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator       find<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> const_iterator find<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="keyword added">constexpr</span> size_type      count<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> size_type count<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="keyword added">constexpr</span> <span class='keyword'>bool</span>           contains<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> contains<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="keyword added">constexpr</span> iterator       lower_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> const_iterator lower_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator       lower_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> const_iterator lower_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="keyword added">constexpr</span> iterator       upper_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> const_iterator upper_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator       upper_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> const_iterator upper_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, iterator<span class='anglebracket'>&gt;</span>               equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>const_iterator, const_iterator<span class='anglebracket'>&gt;</span>   equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, iterator<span class='anglebracket'>&gt;</span>             equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>const_iterator, const_iterator<span class='anglebracket'>&gt;</span> equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
  <span class='curlybracket'>}</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span><i >iter-key-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span><i >iter-to-alloc-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    multimap<span class='parenthesis'>(</span>InputIterator, InputIterator, Compare <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, Allocator <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> multimap<span class='anglebracket'>&lt;</span><i >iter-key-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>, <i >iter-mapped-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>,
                  Compare, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range__________'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span><i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span><i >range-to-alloc-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    multimap<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, Compare <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, Allocator <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> multimap<span class='anglebracket'>&lt;</span><i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, <i >range-mapped-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, Compare, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span>pair<span class='anglebracket'>&lt;</span><span class='keyword'>const</span> Key, T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    multimap<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>pair<span class='anglebracket'>&lt;</span>Key, T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>, Compare <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, Allocator <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> multimap<span class='anglebracket'>&lt;</span>Key, T, Compare, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    multimap<span class='parenthesis'>(</span>InputIterator, InputIterator, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> multimap<span class='anglebracket'>&lt;</span><i >iter-key-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>, <i >iter-mapped-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>,
                  less<span class='anglebracket'>&lt;</span><i >iter-key-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range___________'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    multimap<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> multimap<span class='anglebracket'>&lt;</span><i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, <i >range-mapped-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, less<span class='anglebracket'>&lt;</span><i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    multimap<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>pair<span class='anglebracket'>&lt;</span>Key, T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> multimap<span class='anglebracket'>&lt;</span>Key, T, less<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>}</span>
</span></span></span></span></span>
<a class='index' id='lib:multimap,operator==_'></a><a class='index' id='lib:operator==,multimap'></a><a class='index' id='lib:multimap,operator<'></a><a class='index' id='lib:operator<,multimap'></a></div></div></div><div id='multimap.cons' class='section'><h4 ><a class='secnum' href='#multimap.cons' style='min-width:95pt'>24.4.5.2</a> Constructors <a class='abbr_ref' href='multimap.cons'>[multimap.cons]</a></h4><div class='texpara'><div id='lib:multimap,constructor________'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:multimap,constructor________'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> multimap<span class='parenthesis'>(</span><span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='multimap.cons-1'><div class='marginalizedparent'><a class='marginalized' href='#multimap.cons-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L11291'>#</a></div><div class='texpara'><div id='multimap.cons-1.sentence-1' class='sentence'><i >Effects</i>: Constructs an empty
<span class='texttt'>multimap</span>
using the specified comparison object and allocator<a class='hidden_link' href='#multimap.cons-1.sentence-1'>.</a></div></div></div></div><div class='para' id='multimap.cons-2'><div class='marginalizedparent'><a class='marginalized' href='#multimap.cons-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L11297'>#</a></div><div class='texpara'><div id='multimap.cons-2.sentence-1' class='sentence'><i >Complexity</i>: Constant<a class='hidden_link' href='#multimap.cons-2.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:multimap,constructor_________'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:multimap,constructor_________'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> multimap<span class='parenthesis'>(</span>InputIterator first, InputIterator last,
           <span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
           <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='multimap.cons-3'><div class='marginalizedparent'><a class='marginalized' href='#multimap.cons-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L11311'>#</a></div><div class='texpara'><div id='multimap.cons-3.sentence-1' class='sentence'><i >Effects</i>: Constructs an empty
<span class='texttt'>multimap</span>
using the specified comparison object and allocator,
and inserts elements from the range
[<span class='texttt'>first, last</span>)<a class='hidden_link' href='#multimap.cons-3.sentence-1'>.</a></div></div></div></div><div class='para' id='multimap.cons-4'><div class='marginalizedparent'><a class='marginalized' href='#multimap.cons-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L11319'>#</a></div><div class='texpara'><div id='multimap.cons-4.sentence-1' class='sentence'><i >Complexity</i>: Linear in <span class='math'><span class='mathalpha'>N</span></span> if the range
[<span class='texttt'>first, last</span>)
is already sorted with respect to <span class='texttt'>comp</span>
and otherwise <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.085em;">N</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">log</span></span><span class="mjx-mo"><span class="mjx-char"></span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.085em;">N</span></span></span></span></span></span>,
where <span class='math'><span class='mathalpha'>N</span></span> is
<span class='texttt'>last <span class='operator'>-</span> first</span><a class='hidden_link' href='#multimap.cons-4.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:multimap,constructor__________'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:multimap,constructor__________'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range_______________________________________________________'><span class='texttt'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> multimap<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='multimap.cons-5'><div class='marginalizedparent'><a class='marginalized' href='#multimap.cons-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L11336'>#</a></div><div class='texpara'><div id='multimap.cons-5.sentence-1' class='sentence'><i >Effects</i>: Constructs an empty <span class='texttt'>multimap</span>
using the specified comparison object and allocator, and
inserts elements from the range <span class='texttt'>rg</span><a class='hidden_link' href='#multimap.cons-5.sentence-1'>.</a></div></div></div></div><div class='para' id='multimap.cons-6'><div class='marginalizedparent'><a class='marginalized' href='#multimap.cons-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L11342'>#</a></div><div class='texpara'><div id='multimap.cons-6.sentence-1' class='sentence'><i >Complexity</i>: Linear in <span class='math'><span class='mathalpha'>N</span></span> if <span class='texttt'>rg</span> is already sorted with respect to <span class='texttt'>comp</span> and
otherwise <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.085em;">N</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">log</span></span><span class="mjx-mo"><span class="mjx-char"></span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.085em;">N</span></span></span></span></span></span>, where <span class='math'><span class='mathalpha'>N</span></span> is <span class='texttt'>ranges<span class='operator'>&#x200b;::&#x200b;</span>distance<span class='parenthesis'>(</span>rg<span class='parenthesis'>)</span></span><a class='hidden_link' href='#multimap.cons-6.sentence-1'>.</a></div></div></div></div></div><div id='multimap.modifiers' class='section'><h4 ><a class='secnum' href='#multimap.modifiers' style='min-width:95pt'>24.4.5.3</a> Modifiers <a class='abbr_ref' href='multimap.modifiers'>[multimap.modifiers]</a></h4><div class='texpara'><div id='lib:multimap,insert__________'><div id='lib:insert,multimap'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:insert,multimap'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> P<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>P<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> P<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, P<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='multimap.modifiers-1'><div class='marginalizedparent'><a class='marginalized' href='#multimap.modifiers-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L11357'>#</a></div><div class='texpara'><div id='multimap.modifiers-1.sentence-1' class='sentence'><i >Constraints</i>: <span class='texttt'>is_<span class='shy'></span>constructible_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>value_<span class='shy'></span>type, P<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#multimap.modifiers-1.sentence-1'>.</a></div></div></div></div><div class='para' id='multimap.modifiers-2'><div class='marginalizedparent'><a class='marginalized' href='#multimap.modifiers-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L11361'>#</a></div><div class='texpara'><div id='multimap.modifiers-2.sentence-1' class='sentence'><i >Effects</i>: The first form is equivalent to
<span class='texttt'><span class='keyword'>return</span> emplace<span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>P<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>x<span class='parenthesis'>)</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#multimap.modifiers-2.sentence-1'>.</a></div> <div id='multimap.modifiers-2.sentence-2' class='sentence'>The second form is
equivalent to <span class='texttt'><span class='keyword'>return</span> emplace_<span class='shy'></span>hint<span class='parenthesis'>(</span>position, std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>P<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>x<span class='parenthesis'>)</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#multimap.modifiers-2.sentence-2'>.</a></div></div></div></div></div><div id='multimap.erasure' class='section'><h4 ><a class='secnum' href='#multimap.erasure' style='min-width:95pt'>24.4.5.4</a> Erasure <a class='abbr_ref' href='multimap.erasure'>[multimap.erasure]</a></h4><div class='texpara'><div id='lib:multimap,erase_if'><div id='lib:erase_if,multimap'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:erase_if,multimap'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> Allocator, <span class='keyword'>class</span> Predicate<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>typename</span> multimap<span class='anglebracket'>&lt;</span>Key, T, Compare, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>size_type
    erase_if<span class='parenthesis'>(</span>multimap<span class='anglebracket'>&lt;</span>Key, T, Compare, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> c, Predicate pred<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='multimap.erasure-1'><div class='marginalizedparent'><a class='marginalized' href='#multimap.erasure-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L11378'>#</a></div><div class='texpara'><div id='multimap.erasure-1.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>auto</span> original_size <span class='operator'>=</span> c<span class='operator'>.</span>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
<span class='keyword'>for</span> <span class='parenthesis'>(</span><span class='keyword'>auto</span> i <span class='operator'>=</span> c<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, last <span class='operator'>=</span> c<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>; i <span class='operator'>!</span><span class='operator'>=</span> last; <span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
  <span class='keyword'>if</span> <span class='parenthesis'>(</span>pred<span class='parenthesis'>(</span><span class='operator'>*</span>i<span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
    i <span class='operator'>=</span> c<span class='operator'>.</span>erase<span class='parenthesis'>(</span>i<span class='parenthesis'>)</span>;
  <span class='curlybracket'>}</span> <span class='keyword'>else</span> <span class='curlybracket'>{</span>
    <span class='operator'>+</span><span class='operator'>+</span>i;
  <span class='curlybracket'>}</span>
<span class='curlybracket'>}</span>
<span class='keyword'>return</span> original_size <span class='operator'>-</span> c<span class='operator'>.</span>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
</span></div></div></div></div></div></div><div id='set' class='section'><h3 ><a class='secnum' href='#set' style='min-width:80pt'>24.4.6</a> Class template <span class='texttt'>set</span> <a class='abbr_ref' href='set'>[set]</a></h3><div id='set.overview' class='section'><h4 ><a class='secnum' href='#set.overview' style='min-width:95pt'>24.4.6.1</a> Overview <a class='abbr_ref' href='set.overview'>[set.overview]</a></h4><div class='para' id='set.overview-1'><div class='marginalizedparent'><a class='marginalized' href='#set.overview-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L11398'>#</a></div><div class='texpara'><div id='set.overview-1.sentence-1' class='sentence'><a class='index' id='lib:set'></a>A
<span class='texttt'>set</span>
is an associative container that supports unique keys (i.e., contains at most one of each key value) and
provides for fast retrieval of the keys themselves<a class='hidden_link' href='#set.overview-1.sentence-1'>.</a></div> <div id='set.overview-1.sentence-2' class='sentence'>The
<span class='texttt'>set</span> class
supports bidirectional iterators<a class='hidden_link' href='#set.overview-1.sentence-2'>.</a></div></div></div><div class='para' id='set.overview-2'><div class='marginalizedparent'><a class='marginalized' href='#set.overview-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L11408'>#</a></div><div class='texpara'><div id='set.overview-2.sentence-1' class='sentence'>A <span class='texttt'>set</span> meets all of the requirements
of a container (<a href='#container.reqmts' title='24.2.2.2&emsp;Container requirements'>[container.<span class='shy'></span>reqmts]</a>),
of a reversible container (<a href='#container.rev.reqmts' title='24.2.2.3&emsp;Reversible container requirements'>[container.<span class='shy'></span>rev.<span class='shy'></span>reqmts]</a>),
of an allocator-aware container (<a href='#container.alloc.reqmts' title='24.2.2.5&emsp;Allocator-aware containers'>[container.<span class='shy'></span>alloc.<span class='shy'></span>reqmts]</a>)<a class='hidden_link' href='#set.overview-2.sentence-1'>.</a></div> <div id='set.overview-2.sentence-2' class='sentence'>and
of an associative container (<a href='#associative.reqmts' title='24.2.7&emsp;Associative containers'>[associative.<span class='shy'></span>reqmts]</a>)<a class='hidden_link' href='#set.overview-2.sentence-2'>.</a></div> <div id='set.overview-2.sentence-3' class='sentence'>A
<span class='texttt'>set</span>
also provides most operations described in <a href='#associative.reqmts' title='24.2.7&emsp;Associative containers'>[associative.<span class='shy'></span>reqmts]</a>
for unique keys<a class='hidden_link' href='#set.overview-2.sentence-3'>.</a></div> <div id='set.overview-2.sentence-4' class='sentence'>This means that a
<span class='texttt'>set</span>
supports the
<span class='texttt'>a_<span class='shy'></span>uniq</span>
operations in <a href='#associative.reqmts' title='24.2.7&emsp;Associative containers'>[associative.<span class='shy'></span>reqmts]</a>
but not the
<span class='texttt'>a_<span class='shy'></span>eq</span>
operations<a class='hidden_link' href='#set.overview-2.sentence-4'>.</a></div> <div id='set.overview-2.sentence-5' class='sentence'>For a
<span class='texttt'>set<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span></span>
both the
<span class='texttt'>key_<span class='shy'></span>type</span>
and
<span class='texttt'>value_<span class='shy'></span>type</span>
are
<span class='texttt'>Key</span><a class='hidden_link' href='#set.overview-2.sentence-5'>.</a></div> <div id='set.overview-2.sentence-6' class='sentence'>Descriptions are provided here only for operations on
<span class='texttt'>set</span>
that are not described in one of these tables
and for operations where there is additional semantic information<a class='hidden_link' href='#set.overview-2.sentence-6'>.</a></div></div>

<div class='para added' id='set.overview-3'><div class='marginalizedparent'><a class='marginalized' href='#set.overview-3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href=''>#</a></div>
<div class='texpara'>The types <span class="texttt">iterator</span> and <span class="texttt">const_iterator</span> meet the constexpr iterator requirements (<a href="iterator.requirements.general" title="25.3.1 General">[iterator.<span class="shy"></span>requirements.<span class="shy"></span>general]</a>).</div></div>


<div class='texpara'><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> set <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> key_type               <span class='operator'>=</span> Key;
    <span class='keyword'>using</span> key_compare            <span class='operator'>=</span> Compare;
    <span class='keyword'>using</span> value_type             <span class='operator'>=</span> Key;
    <span class='keyword'>using</span> value_compare          <span class='operator'>=</span> Compare;
    <span class='keyword'>using</span> allocator_type         <span class='operator'>=</span> Allocator;
    <span class='keyword'>using</span> pointer                <span class='operator'>=</span> <span class='keyword'>typename</span> allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>pointer;
    <span class='keyword'>using</span> const_pointer          <span class='operator'>=</span> <span class='keyword'>typename</span> allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>const_pointer;
    <span class='keyword'>using</span> reference              <span class='operator'>=</span> value_type<span class='operator'>&amp;</span>;
    <span class='keyword'>using</span> const_reference        <span class='operator'>=</span> <span class='keyword'>const</span> value_type<span class='operator'>&amp;</span>;
    <span class='keyword'>using</span> size_type              <span class='operator'>=</span> <a class='index' id=':type_of_set::size_type'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> difference_type        <span class='operator'>=</span> <a class='index' id=':type_of_set::difference_type'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> iterator               <span class='operator'>=</span> <a class='index' id=':type_of_set::iterator'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> const_iterator         <span class='operator'>=</span> <a class='index' id=':type_of_set::const_iterator'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> reverse_iterator       <span class='operator'>=</span> std<span class='operator'>::</span>reverse_iterator<span class='anglebracket'>&lt;</span>iterator<span class='anglebracket'>&gt;</span>;
    <span class='keyword'>using</span> const_reverse_iterator <span class='operator'>=</span> std<span class='operator'>::</span>reverse_iterator<span class='anglebracket'>&lt;</span>const_iterator<span class='anglebracket'>&gt;</span>;
    <span class='keyword'>using</span> node_type              <span class='operator'>=</span> <i ><span class='texttt'>unspecified</span></i>;
    <span class='keyword'>using</span> insert_return_type     <span class='operator'>=</span> <i >insert-return-type</i><span class='anglebracket'>&lt;</span>iterator, node_type<span class='anglebracket'>&gt;</span>;

    <span class='comment'>// <a href='#set.cons' title='24.4.6.2&emsp;Constructors, copy, and assignment'>[set.<span class='shy'></span>cons]</a>, construct/copy/destroy</span>
    <span class="keyword added">constexpr</span> set<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>:</span> set<span class='parenthesis'>(</span>Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> set<span class='parenthesis'>(</span><span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> set<span class='parenthesis'>(</span>InputIterator first, InputIterator last,
          <span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> set<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> set<span class='parenthesis'>(</span><span class='keyword'>const</span> set<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> set<span class='parenthesis'>(</span>set<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> set<span class='parenthesis'>(</span><span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> set<span class='parenthesis'>(</span><span class='keyword'>const</span> set<span class='operator'>&amp;</span>, <span class='keyword'>const</span> type_identity_t<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> set<span class='parenthesis'>(</span>set<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, <span class='keyword'>const</span> type_identity_t<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> set<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span>, <span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
        <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> set<span class='parenthesis'>(</span>InputIterator first, InputIterator last, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>
        <span class='operator'>:</span> set<span class='parenthesis'>(</span>first, last, Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range_________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> set<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span><span class='parenthesis'>)</span>
        <span class='operator'>:</span> set<span class='parenthesis'>(</span>from_range, std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>rg<span class='parenthesis'>)</span>, Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> set<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>
      <span class='operator'>:</span> set<span class='parenthesis'>(</span>il, Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> <span class='operator'>~</span>set<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> set<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> set<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> set<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span>set<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>
      <span class='keyword'>noexcept</span><span class='parenthesis'>(</span>allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>is_always_equal<span class='operator'>::</span>value <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
               is_nothrow_move_assignable_v<span class='anglebracket'>&lt;</span>Compare<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> set<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> allocator_type get_allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// iterators</span>
    <span class="keyword added">constexpr</span> iterator               begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator         begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> iterator               end<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator         end<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class="keyword added">constexpr</span> reverse_iterator       rbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_reverse_iterator rbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> reverse_iterator       rend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_reverse_iterator rend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class="keyword added">constexpr</span> const_iterator         cbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator         cend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_reverse_iterator crbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_reverse_iterator crend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// capacity</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> size_type size<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> size_type max_size<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// <a href='#set.modifiers' title='24.4.6.4&emsp;Modifiers'>[set.<span class='shy'></span>modifiers]</a>, modifiers</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> emplace<span class='parenthesis'>(</span>Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator emplace_hint<span class='parenthesis'>(</span>const_iterator position, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator,<span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> insert<span class='parenthesis'>(</span><span class='keyword'>const</span> value_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator,<span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> insert<span class='parenthesis'>(</span>value_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> insert<span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, <span class='keyword'>const</span> value_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, value_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert<span class='parenthesis'>(</span>InputIterator first, InputIterator last<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range__________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert_range<span class='parenthesis'>(</span>R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> node_type extract<span class='parenthesis'>(</span>const_iterator position<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> node_type extract<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> node_type extract<span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> insert_return_type insert<span class='parenthesis'>(</span>node_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> nh<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator           insert<span class='parenthesis'>(</span>const_iterator hint, node_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> nh<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> iterator  erase<span class='parenthesis'>(</span>iterator position<span class='parenthesis'>)</span>
      <span class='keyword'>requires</span> <span class='parenthesis'>(</span><span class='operator'>!</span><a href='concept.same#concept:same_as' title='18.4.2&emsp;Concept same_&shy;as&emsp;[concept.same]'><span id='conceptref:same_as'><span class='tcode_in_codeblock'>same_<span class='shy'></span>as</span></span></a><span class='anglebracket'>&lt;</span>iterator, const_iterator<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator  erase<span class='parenthesis'>(</span>const_iterator position<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> size_type erase<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> size_type erase<span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator  erase<span class='parenthesis'>(</span>const_iterator first, const_iterator last<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span>      swap<span class='parenthesis'>(</span>set<span class='operator'>&amp;</span><span class='parenthesis'>)</span>
      <span class='keyword'>noexcept</span><span class='parenthesis'>(</span>allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>is_always_equal<span class='operator'>::</span>value <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
               is_nothrow_swappable_v<span class='anglebracket'>&lt;</span>Compare<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span>      clear<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;

    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> C2<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>set<span class='anglebracket'>&lt;</span>Key, C2, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> source<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> C2<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>set<span class='anglebracket'>&lt;</span>Key, C2, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span><span class='operator'>&amp;</span> source<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> C2<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>multiset<span class='anglebracket'>&lt;</span>Key, C2, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> source<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> C2<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>multiset<span class='anglebracket'>&lt;</span>Key, C2, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span><span class='operator'>&amp;</span> source<span class='parenthesis'>)</span>;

    <span class='comment'>// observers</span>
    <span class="keyword added">constexpr</span> key_compare key_comp<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> value_compare value_comp<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// set operations</span>
    <span class="keyword added">constexpr</span> iterator       find<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> const_iterator find<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator       find<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> const_iterator find<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="keyword added">constexpr</span> size_type      count<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> size_type count<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="keyword added">constexpr</span> <span class='keyword'>bool</span>           contains<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> contains<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="keyword added">constexpr</span> iterator       lower_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> const_iterator lower_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator       lower_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> const_iterator lower_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="keyword added">constexpr</span> iterator       upper_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> const_iterator upper_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator       upper_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> const_iterator upper_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, iterator<span class='anglebracket'>&gt;</span>               equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>const_iterator, const_iterator<span class='anglebracket'>&gt;</span>   equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, iterator<span class='anglebracket'>&gt;</span>             equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>const_iterator, const_iterator<span class='anglebracket'>&gt;</span> equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
  <span class='curlybracket'>}</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator,
           <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    set<span class='parenthesis'>(</span>InputIterator, InputIterator,
        Compare <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, Allocator <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> set<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>, Compare, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range____________'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    set<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, Compare <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, Allocator <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> set<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, Compare, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>, <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    set<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>, Compare <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, Allocator <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> set<span class='anglebracket'>&lt;</span>Key, Compare, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    set<span class='parenthesis'>(</span>InputIterator, InputIterator, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> set<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>,
             less<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range_____________'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    set<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> set<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, less<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    set<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>, Allocator<span class='parenthesis'>)</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> set<span class='anglebracket'>&lt;</span>Key, less<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>}</span>
</span>
<a class='index' id='lib:set,operator==_'></a><a class='index' id='lib:operator==,set'></a><a class='index' id='lib:set,operator<'></a><a class='index' id='lib:operator<,set'></a></div></div></div><div id='set.cons' class='section'><h4 ><a class='secnum' href='#set.cons' style='min-width:95pt'>24.4.6.2</a> Constructors, copy, and assignment <a class='abbr_ref' href='set.cons'>[set.cons]</a></h4><div class='texpara'><div id='lib:set,constructor________'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:set,constructor________'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> set<span class='parenthesis'>(</span><span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='set.cons-1'><div class='marginalizedparent'><a class='marginalized' href='#set.cons-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L11631'>#</a></div><div class='texpara'><div id='set.cons-1.sentence-1' class='sentence'><i >Effects</i>: Constructs an empty <span class='texttt'>set</span> using the specified comparison object and allocator<a class='hidden_link' href='#set.cons-1.sentence-1'>.</a></div></div></div></div><div class='para' id='set.cons-2'><div class='marginalizedparent'><a class='marginalized' href='#set.cons-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L11635'>#</a></div><div class='texpara'><div id='set.cons-2.sentence-1' class='sentence'><i >Complexity</i>: Constant<a class='hidden_link' href='#set.cons-2.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:set,constructor_________'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:set,constructor_________'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> set<span class='parenthesis'>(</span>InputIterator first, InputIterator last,
      <span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='set.cons-3'><div class='marginalizedparent'><a class='marginalized' href='#set.cons-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L11648'>#</a></div><div class='texpara'><div id='set.cons-3.sentence-1' class='sentence'><i >Effects</i>: Constructs an empty
<span class='texttt'>set</span>
using the specified comparison object and allocator,
and inserts elements from the range
[<span class='texttt'>first, last</span>)<a class='hidden_link' href='#set.cons-3.sentence-1'>.</a></div></div></div></div><div class='para' id='set.cons-4'><div class='marginalizedparent'><a class='marginalized' href='#set.cons-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L11656'>#</a></div><div class='texpara'><div id='set.cons-4.sentence-1' class='sentence'><i >Complexity</i>: Linear in <span class='math'><span class='mathalpha'>N</span></span> if the range
[<span class='texttt'>first, last</span>)
is already sorted with respect to <span class='texttt'>comp</span>
and otherwise <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.085em;">N</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">log</span></span><span class="mjx-mo"><span class="mjx-char"></span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.085em;">N</span></span></span></span></span></span>,
where <span class='math'><span class='mathalpha'>N</span></span> is
<span class='texttt'>last <span class='operator'>-</span> first</span><a class='hidden_link' href='#set.cons-4.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:set,constructor__________'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:set,constructor__________'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range___________________________________________________________'><span class='texttt'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> set<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='set.cons-5'><div class='marginalizedparent'><a class='marginalized' href='#set.cons-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L11673'>#</a></div><div class='texpara'><div id='set.cons-5.sentence-1' class='sentence'><i >Effects</i>: Constructs an empty <span class='texttt'>set</span> using the specified comparison object and allocator,
and inserts elements from the range <span class='texttt'>rg</span><a class='hidden_link' href='#set.cons-5.sentence-1'>.</a></div></div></div></div><div class='para' id='set.cons-6'><div class='marginalizedparent'><a class='marginalized' href='#set.cons-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L11678'>#</a></div><div class='texpara'><div id='set.cons-6.sentence-1' class='sentence'><i >Complexity</i>: Linear in <span class='math'><span class='mathalpha'>N</span></span> if <span class='texttt'>rg</span> is already sorted with respect to <span class='texttt'>comp</span> and
otherwise <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.085em;">N</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">log</span></span><span class="mjx-mo"><span class="mjx-char"></span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.085em;">N</span></span></span></span></span></span>, where <span class='math'><span class='mathalpha'>N</span></span> is <span class='texttt'>ranges<span class='operator'>&#x200b;::&#x200b;</span>distance<span class='parenthesis'>(</span>rg<span class='parenthesis'>)</span></span><a class='hidden_link' href='#set.cons-6.sentence-1'>.</a></div></div></div></div></div><div id='set.erasure' class='section'><h4 ><a class='secnum' href='#set.erasure' style='min-width:95pt'>24.4.6.3</a> Erasure <a class='abbr_ref' href='set.erasure'>[set.erasure]</a></h4><div class='texpara'><div id='lib:set,erase_if'><div id='lib:erase_if,set'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:erase_if,set'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> Allocator, <span class='keyword'>class</span> Predicate<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>typename</span> set<span class='anglebracket'>&lt;</span>Key, Compare, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>size_type
    erase_if<span class='parenthesis'>(</span>set<span class='anglebracket'>&lt;</span>Key, Compare, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> c, Predicate pred<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='set.erasure-1'><div class='marginalizedparent'><a class='marginalized' href='#set.erasure-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L11694'>#</a></div><div class='texpara'><div id='set.erasure-1.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>auto</span> original_size <span class='operator'>=</span> c<span class='operator'>.</span>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
<span class='keyword'>for</span> <span class='parenthesis'>(</span><span class='keyword'>auto</span> i <span class='operator'>=</span> c<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, last <span class='operator'>=</span> c<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>; i <span class='operator'>!</span><span class='operator'>=</span> last; <span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
  <span class='keyword'>if</span> <span class='parenthesis'>(</span>pred<span class='parenthesis'>(</span><span class='operator'>*</span>i<span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
    i <span class='operator'>=</span> c<span class='operator'>.</span>erase<span class='parenthesis'>(</span>i<span class='parenthesis'>)</span>;
  <span class='curlybracket'>}</span> <span class='keyword'>else</span> <span class='curlybracket'>{</span>
    <span class='operator'>+</span><span class='operator'>+</span>i;
  <span class='curlybracket'>}</span>
<span class='curlybracket'>}</span>
<span class='keyword'>return</span> original_size <span class='operator'>-</span> c<span class='operator'>.</span>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
</span></div></div></div></div></div><div id='set.modifiers' class='section'><h4 ><a class='secnum' href='#set.modifiers' style='min-width:95pt'>24.4.6.4</a> Modifiers <a class='abbr_ref' href='set.modifiers'>[set.modifiers]</a></h4><div class='texpara'><div id='lib:set,insert__________'><div id='lib:insert,set'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:insert,set'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> insert<span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator hint, K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='set.modifiers-1'><div class='marginalizedparent'><a class='marginalized' href='#set.modifiers-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L11719'>#</a></div><div class='texpara'><div id='set.modifiers-1.sentence-1' class='sentence'><i >Constraints</i>: The <a href='expr.prim.id.qual#nt:qualified-id' title='7.5.5.3&emsp;Qualified names&emsp;[expr.prim.id.qual]'><span id='ntref:qualified-id__________'><span class='textsf'><i >qualified-id</i></span></span></a> <span class='texttt'>Compare<span class='operator'>&#x200b;::&#x200b;</span>is_<span class='shy'></span>transparent</span>
is valid and denotes a type<a class='hidden_link' href='#set.modifiers-1.sentence-1'>.</a></div> <div id='set.modifiers-1.sentence-2' class='sentence'>For the second overload,
<span class='texttt'>is_<span class='shy'></span>convertible_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, const_<span class='shy'></span>iterator<span class='anglebracket'>&gt;</span></span> and
<span class='texttt'>is_<span class='shy'></span>convertible_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, iterator<span class='anglebracket'>&gt;</span></span> are both <span class='texttt'><span class='literal'>false</span></span><a class='hidden_link' href='#set.modifiers-1.sentence-2'>.</a></div></div></div></div><div class='para' id='set.modifiers-2'><div class='marginalizedparent'><a class='marginalized' href='#set.modifiers-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L11727'>#</a></div><div class='texpara'><div id='set.modifiers-2.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>value_<span class='shy'></span>type</span> is <i >Cpp17EmplaceConstructible</i> into <span class='texttt'>set</span> from
<span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>K<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>x<span class='parenthesis'>)</span></span><a class='hidden_link' href='#set.modifiers-2.sentence-1'>.</a></div></div></div></div><div class='para' id='set.modifiers-3'><div class='marginalizedparent'><a class='marginalized' href='#set.modifiers-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L11732'>#</a></div><div class='texpara'><div id='set.modifiers-3.sentence-1' class='sentence'><i >Effects</i>: If the set already contains an element that is equivalent to <span class='texttt'>x</span>,
there is no effect<a class='hidden_link' href='#set.modifiers-3.sentence-1'>.</a></div> <div id='set.modifiers-3.sentence-2' class='sentence'>Otherwise, let <span class='texttt'>r</span> be <span class='texttt'>equal_<span class='shy'></span>range<span class='parenthesis'>(</span>x<span class='parenthesis'>)</span></span><a class='hidden_link' href='#set.modifiers-3.sentence-2'>.</a></div> <div id='set.modifiers-3.sentence-3' class='sentence'>Constructs an object <span class='texttt'>u</span> of type <span class='texttt'>value_<span class='shy'></span>type</span>
with <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>K<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>x<span class='parenthesis'>)</span></span><a class='hidden_link' href='#set.modifiers-3.sentence-3'>.</a></div> <div id='set.modifiers-3.sentence-4' class='sentence'>If <span class='texttt'>equal_<span class='shy'></span>range<span class='parenthesis'>(</span>u<span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> r</span> is <span class='texttt'><span class='literal'>false</span></span>, the behavior is undefined<a class='hidden_link' href='#set.modifiers-3.sentence-4'>.</a></div> <div id='set.modifiers-3.sentence-5' class='sentence'>Inserts <span class='texttt'>u</span> into <span class='texttt'><span class='operator'>*</span><span class='keyword'>this</span></span><a class='hidden_link' href='#set.modifiers-3.sentence-5'>.</a></div></div></div></div><div class='para' id='set.modifiers-4'><div class='marginalizedparent'><a class='marginalized' href='#set.modifiers-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L11742'>#</a></div><div class='texpara'><div id='set.modifiers-4.sentence-1' class='sentence'><i >Returns</i>: For the first overload,
the <span class='texttt'><span class='keyword'>bool</span></span> component of the returned pair is true
if and only if the insertion took place<a class='hidden_link' href='#set.modifiers-4.sentence-1'>.</a></div> <div id='set.modifiers-4.sentence-2' class='sentence'>The returned iterator points to the set element that is equivalent to <span class='texttt'>x</span><a class='hidden_link' href='#set.modifiers-4.sentence-2'>.</a></div></div></div></div><div class='para' id='set.modifiers-5'><div class='marginalizedparent'><a class='marginalized' href='#set.modifiers-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L11749'>#</a></div><div class='texpara'><div id='set.modifiers-5.sentence-1' class='sentence'><i >Complexity</i>: Logarithmic<a class='hidden_link' href='#set.modifiers-5.sentence-1'>.</a></div></div></div></div></div></div><div id='multiset' class='section'><h3 ><a class='secnum' href='#multiset' style='min-width:80pt'>24.4.7</a> Class template <span class='texttt'>multiset</span> <a class='abbr_ref' href='multiset'>[multiset]</a></h3><div id='multiset.overview' class='section'><h4 ><a class='secnum' href='#multiset.overview' style='min-width:95pt'>24.4.7.1</a> Overview <a class='abbr_ref' href='multiset.overview'>[multiset.overview]</a></h4><div class='para' id='multiset.overview-1'><div class='marginalizedparent'><a class='marginalized' href='#multiset.overview-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L11758'>#</a></div><div class='texpara'><div id='multiset.overview-1.sentence-1' class='sentence'><a class='index' id='lib:multiset'></a>A
<span class='texttt'>multiset</span>
is an associative container that supports equivalent keys (i.e., possibly contains multiple copies of
the same key value) and provides for fast retrieval of the keys themselves<a class='hidden_link' href='#multiset.overview-1.sentence-1'>.</a></div> <div id='multiset.overview-1.sentence-2' class='sentence'>The
<span class='texttt'>multiset</span> class
supports bidirectional iterators<a class='hidden_link' href='#multiset.overview-1.sentence-2'>.</a></div></div></div><div class='para' id='multiset.overview-2'><div class='marginalizedparent'><a class='marginalized' href='#multiset.overview-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L11768'>#</a></div><div class='texpara'><div id='multiset.overview-2.sentence-1' class='sentence'>A <span class='texttt'>multiset</span> meets all of the requirements
of a container (<a href='#container.reqmts' title='24.2.2.2&emsp;Container requirements'>[container.<span class='shy'></span>reqmts]</a>),
of a reversible container (<a href='#container.rev.reqmts' title='24.2.2.3&emsp;Reversible container requirements'>[container.<span class='shy'></span>rev.<span class='shy'></span>reqmts]</a>),
of an allocator-aware container (<a href='#container.alloc.reqmts' title='24.2.2.5&emsp;Allocator-aware containers'>[container.<span class='shy'></span>alloc.<span class='shy'></span>reqmts]</a>),
of an associative container (<a href='#associative.reqmts' title='24.2.7&emsp;Associative containers'>[associative.<span class='shy'></span>reqmts]</a>)<a class='hidden_link' href='#multiset.overview-2.sentence-1'>.</a></div> <div id='multiset.overview-2.sentence-2' class='sentence'><span class='texttt'>multiset</span>
also provides most operations described in <a href='#associative.reqmts' title='24.2.7&emsp;Associative containers'>[associative.<span class='shy'></span>reqmts]</a>
for duplicate keys<a class='hidden_link' href='#multiset.overview-2.sentence-2'>.</a></div> <div id='multiset.overview-2.sentence-3' class='sentence'>This means that a
<span class='texttt'>multiset</span>
supports the
<span class='texttt'>a_<span class='shy'></span>eq</span>
operations in <a href='#associative.reqmts' title='24.2.7&emsp;Associative containers'>[associative.<span class='shy'></span>reqmts]</a>
but not the
<span class='texttt'>a_<span class='shy'></span>uniq</span>
operations<a class='hidden_link' href='#multiset.overview-2.sentence-3'>.</a></div> <div id='multiset.overview-2.sentence-4' class='sentence'>For a
<span class='texttt'>multiset<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span></span>
both the
<span class='texttt'>key_<span class='shy'></span>type</span>
and
<span class='texttt'>value_<span class='shy'></span>type</span>
are
<span class='texttt'>Key</span><a class='hidden_link' href='#multiset.overview-2.sentence-4'>.</a></div> <div id='multiset.overview-2.sentence-5' class='sentence'>Descriptions are provided here only for operations on
<span class='texttt'>multiset</span>
that are not described in one of these tables
and for operations where there is additional semantic information<a class='hidden_link' href='#multiset.overview-2.sentence-5'>.</a></div></div>

<div class='para added' id='multiset.overview-3'><div class='marginalizedparent'><a class='marginalized' href='#multiset.overview-3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href=''>#</a></div>
<div class='texpara'>The types <span class="texttt">iterator</span> and <span class="texttt">const_iterator</span> meet the constexpr iterator requirements (<a href="iterator.requirements.general" title="25.3.1 General">[iterator.<span class="shy"></span>requirements.<span class="shy"></span>general]</a>).</div></div>

<div class='texpara'><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> multiset <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> key_type               <span class='operator'>=</span> Key;
    <span class='keyword'>using</span> key_compare            <span class='operator'>=</span> Compare;
    <span class='keyword'>using</span> value_type             <span class='operator'>=</span> Key;
    <span class='keyword'>using</span> value_compare          <span class='operator'>=</span> Compare;
    <span class='keyword'>using</span> allocator_type         <span class='operator'>=</span> Allocator;
    <span class='keyword'>using</span> pointer                <span class='operator'>=</span> <span class='keyword'>typename</span> allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>pointer;
    <span class='keyword'>using</span> const_pointer          <span class='operator'>=</span> <span class='keyword'>typename</span> allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>const_pointer;
    <span class='keyword'>using</span> reference              <span class='operator'>=</span> value_type<span class='operator'>&amp;</span>;
    <span class='keyword'>using</span> const_reference        <span class='operator'>=</span> <span class='keyword'>const</span> value_type<span class='operator'>&amp;</span>;
    <span class='keyword'>using</span> size_type              <span class='operator'>=</span> <a class='index' id=':type_of_multiset::size_type'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> difference_type        <span class='operator'>=</span> <a class='index' id=':type_of_multiset::difference_type'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> iterator               <span class='operator'>=</span> <a class='index' id=':type_of_multiset::iterator'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> const_iterator         <span class='operator'>=</span> <a class='index' id=':type_of_multiset::const_iterator'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> reverse_iterator       <span class='operator'>=</span> std<span class='operator'>::</span>reverse_iterator<span class='anglebracket'>&lt;</span>iterator<span class='anglebracket'>&gt;</span>;
    <span class='keyword'>using</span> const_reverse_iterator <span class='operator'>=</span> std<span class='operator'>::</span>reverse_iterator<span class='anglebracket'>&lt;</span>const_iterator<span class='anglebracket'>&gt;</span>;
    <span class='keyword'>using</span> node_type              <span class='operator'>=</span> <i ><span class='texttt'>unspecified</span></i>;

    <span class='comment'>// <a href='#multiset.cons' title='24.4.7.2&emsp;Constructors'>[multiset.<span class='shy'></span>cons]</a>, construct/copy/destroy</span>
    <span class="keyword added">constexpr</span> multiset<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>:</span> multiset<span class='parenthesis'>(</span>Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> multiset<span class='parenthesis'>(</span><span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> multiset<span class='parenthesis'>(</span>InputIterator first, InputIterator last,
               <span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range____________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> multiset<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg,
               <span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> multiset<span class='parenthesis'>(</span><span class='keyword'>const</span> multiset<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> multiset<span class='parenthesis'>(</span>multiset<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> multiset<span class='parenthesis'>(</span><span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> multiset<span class='parenthesis'>(</span><span class='keyword'>const</span> multiset<span class='operator'>&amp;</span>, <span class='keyword'>const</span> type_identity_t<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> multiset<span class='parenthesis'>(</span>multiset<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, <span class='keyword'>const</span> type_identity_t<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> multiset<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span>, <span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
             <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> multiset<span class='parenthesis'>(</span>InputIterator first, InputIterator last, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>
        <span class='operator'>:</span> multiset<span class='parenthesis'>(</span>first, last, Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range_____________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> multiset<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span><span class='parenthesis'>)</span>
        <span class='operator'>:</span> multiset<span class='parenthesis'>(</span>from_range, std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>rg<span class='parenthesis'>)</span>, Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> multiset<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>
      <span class='operator'>:</span> multiset<span class='parenthesis'>(</span>il, Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> <span class='operator'>~</span>multiset<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> multiset<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> multiset<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> multiset<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span>multiset<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>
      <span class='keyword'>noexcept</span><span class='parenthesis'>(</span>allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>is_always_equal<span class='operator'>::</span>value <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
               is_nothrow_move_assignable_v<span class='anglebracket'>&lt;</span>Compare<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> multiset<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> allocator_type get_allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// iterators</span>
    <span class="keyword added">constexpr</span> iterator               begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator         begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> iterator               end<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator         end<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class="keyword added">constexpr</span> reverse_iterator       rbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_reverse_iterator rbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> reverse_iterator       rend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_reverse_iterator rend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class="keyword added">constexpr</span> const_iterator         cbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator         cend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_reverse_iterator crbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_reverse_iterator crend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// capacity</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> size_type size<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> size_type max_size<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// modifiers</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator emplace<span class='parenthesis'>(</span>Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator emplace_hint<span class='parenthesis'>(</span>const_iterator position, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span><span class='keyword'>const</span> value_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>value_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, <span class='keyword'>const</span> value_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, value_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert<span class='parenthesis'>(</span>InputIterator first, InputIterator last<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range______________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert_range<span class='parenthesis'>(</span>R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> node_type extract<span class='parenthesis'>(</span>const_iterator position<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> node_type extract<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> node_type extract<span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>node_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> nh<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator hint, node_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> nh<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> iterator  erase<span class='parenthesis'>(</span>iterator position<span class='parenthesis'>)</span>
      <span class='keyword'>requires</span> <span class='parenthesis'>(</span><span class='operator'>!</span><a href='concept.same#concept:same_as' title='18.4.2&emsp;Concept same_&shy;as&emsp;[concept.same]'><span id='conceptref:same_as_'><span class='tcode_in_codeblock'>same_<span class='shy'></span>as</span></span></a><span class='anglebracket'>&lt;</span>iterator, const_iterator<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator  erase<span class='parenthesis'>(</span>const_iterator position<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> size_type erase<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> size_type erase<span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator  erase<span class='parenthesis'>(</span>const_iterator first, const_iterator last<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span>      swap<span class='parenthesis'>(</span>multiset<span class='operator'>&amp;</span><span class='parenthesis'>)</span>
      <span class='keyword'>noexcept</span><span class='parenthesis'>(</span>allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>is_always_equal<span class='operator'>::</span>value <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
               is_nothrow_swappable_v<span class='anglebracket'>&lt;</span>Compare<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span>      clear<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;

    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> C2<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>multiset<span class='anglebracket'>&lt;</span>Key, C2, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> source<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> C2<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>multiset<span class='anglebracket'>&lt;</span>Key, C2, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span><span class='operator'>&amp;</span> source<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> C2<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>set<span class='anglebracket'>&lt;</span>Key, C2, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> source<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> C2<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>set<span class='anglebracket'>&lt;</span>Key, C2, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span><span class='operator'>&amp;</span> source<span class='parenthesis'>)</span>;

    <span class='comment'>// observers</span>
    <span class="keyword added">constexpr</span> key_compare key_comp<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> value_compare value_comp<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// set operations</span>
    <span class="keyword added">constexpr</span> iterator       find<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> const_iterator find<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator       find<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> const_iterator find<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="keyword added">constexpr</span> size_type      count<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> size_type count<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="keyword added">constexpr</span> <span class='keyword'>bool</span>           contains<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> contains<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="keyword added">constexpr</span> iterator       lower_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> const_iterator lower_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator       lower_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> const_iterator lower_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="keyword added">constexpr</span> iterator       upper_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> const_iterator upper_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator       upper_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> const_iterator upper_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, iterator<span class='anglebracket'>&gt;</span>               equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>const_iterator, const_iterator<span class='anglebracket'>&gt;</span>   equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, iterator<span class='anglebracket'>&gt;</span>             equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>const_iterator, const_iterator<span class='anglebracket'>&gt;</span> equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
  <span class='curlybracket'>}</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator,
           <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    multiset<span class='parenthesis'>(</span>InputIterator, InputIterator,
             Compare <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, Allocator <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> multiset<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>, Compare, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range______________'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    multiset<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, Compare <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, Allocator <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> multiset<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, Compare, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>, <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    multiset<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>, Compare <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, Allocator <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> multiset<span class='anglebracket'>&lt;</span>Key, Compare, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    multiset<span class='parenthesis'>(</span>InputIterator, InputIterator, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> multiset<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>,
                  less<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range_______________'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    multiset<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> multiset<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, less<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    multiset<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>, Allocator<span class='parenthesis'>)</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> multiset<span class='anglebracket'>&lt;</span>Key, less<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>}</span>
</span>
<a class='index' id='lib:multiset,operator==_'></a><a class='index' id='lib:operator==,multiset'></a><a class='index' id='lib:multiset,operator<'></a><a class='index' id='lib:operator<,multiset'></a></div></div></div><div id='multiset.cons' class='section'><h4 ><a class='secnum' href='#multiset.cons' style='min-width:95pt'>24.4.7.2</a> Constructors <a class='abbr_ref' href='multiset.cons'>[multiset.cons]</a></h4><div class='texpara'><div id='lib:multiset,constructor________'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:multiset,constructor________'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> multiset<span class='parenthesis'>(</span><span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='multiset.cons-1'><div class='marginalizedparent'><a class='marginalized' href='#multiset.cons-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L11988'>#</a></div><div class='texpara'><div id='multiset.cons-1.sentence-1' class='sentence'><i >Effects</i>: Constructs an empty <span class='texttt'>multiset</span> using the specified comparison object and allocator<a class='hidden_link' href='#multiset.cons-1.sentence-1'>.</a></div></div></div></div><div class='para' id='multiset.cons-2'><div class='marginalizedparent'><a class='marginalized' href='#multiset.cons-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L11992'>#</a></div><div class='texpara'><div id='multiset.cons-2.sentence-1' class='sentence'><i >Complexity</i>: Constant<a class='hidden_link' href='#multiset.cons-2.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:multiset,constructor_________'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:multiset,constructor_________'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> multiset<span class='parenthesis'>(</span>InputIterator first, InputIterator last,
           <span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='multiset.cons-3'><div class='marginalizedparent'><a class='marginalized' href='#multiset.cons-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12005'>#</a></div><div class='texpara'><div id='multiset.cons-3.sentence-1' class='sentence'><i >Effects</i>: Constructs an empty
<span class='texttt'>multiset</span>
using the specified comparison object and allocator,
and inserts elements from the range
[<span class='texttt'>first, last</span>)<a class='hidden_link' href='#multiset.cons-3.sentence-1'>.</a></div></div></div></div><div class='para' id='multiset.cons-4'><div class='marginalizedparent'><a class='marginalized' href='#multiset.cons-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12013'>#</a></div><div class='texpara'><div id='multiset.cons-4.sentence-1' class='sentence'><i >Complexity</i>: Linear in <span class='math'><span class='mathalpha'>N</span></span>
if the range
[<span class='texttt'>first, last</span>)
is already sorted with respect to <span class='texttt'>comp</span> and otherwise <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.085em;">N</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">log</span></span><span class="mjx-mo"><span class="mjx-char"></span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.085em;">N</span></span></span></span></span></span>,
where <span class='math'><span class='mathalpha'>N</span></span> is
<span class='texttt'>last <span class='operator'>-</span> first</span><a class='hidden_link' href='#multiset.cons-4.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:multiset,constructor__________'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:multiset,constructor__________'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range_______________________________________________________________'><span class='texttt'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> multiset<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, <span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span> <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='multiset.cons-5'><div class='marginalizedparent'><a class='marginalized' href='#multiset.cons-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12030'>#</a></div><div class='texpara'><div id='multiset.cons-5.sentence-1' class='sentence'><i >Effects</i>: Constructs an empty <span class='texttt'>multiset</span>
using the specified comparison object and allocator, and
inserts elements from the range <span class='texttt'>rg</span><a class='hidden_link' href='#multiset.cons-5.sentence-1'>.</a></div></div></div></div><div class='para' id='multiset.cons-6'><div class='marginalizedparent'><a class='marginalized' href='#multiset.cons-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12036'>#</a></div><div class='texpara'><div id='multiset.cons-6.sentence-1' class='sentence'><i >Complexity</i>: Linear in <span class='math'><span class='mathalpha'>N</span></span> if <span class='texttt'>rg</span> is already sorted with respect to <span class='texttt'>comp</span> and
otherwise <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.085em;">N</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">log</span></span><span class="mjx-mo"><span class="mjx-char"></span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.085em;">N</span></span></span></span></span></span>, where <span class='math'><span class='mathalpha'>N</span></span> is <span class='texttt'>ranges<span class='operator'>&#x200b;::&#x200b;</span>distance<span class='parenthesis'>(</span>rg<span class='parenthesis'>)</span></span><a class='hidden_link' href='#multiset.cons-6.sentence-1'>.</a></div></div></div></div></div><div id='multiset.erasure' class='section'><h4 ><a class='secnum' href='#multiset.erasure' style='min-width:95pt'>24.4.7.3</a> Erasure <a class='abbr_ref' href='multiset.erasure'>[multiset.erasure]</a></h4><div class='texpara'><div id='lib:multiset,erase_if'><div id='lib:erase_if,multiset'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:erase_if,multiset'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> Allocator, <span class='keyword'>class</span> Predicate<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>typename</span> multiset<span class='anglebracket'>&lt;</span>Key, Compare, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>size_type
    erase_if<span class='parenthesis'>(</span>multiset<span class='anglebracket'>&lt;</span>Key, Compare, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> c, Predicate pred<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='multiset.erasure-1'><div class='marginalizedparent'><a class='marginalized' href='#multiset.erasure-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12052'>#</a></div><div class='texpara'><div id='multiset.erasure-1.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>auto</span> original_size <span class='operator'>=</span> c<span class='operator'>.</span>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
<span class='keyword'>for</span> <span class='parenthesis'>(</span><span class='keyword'>auto</span> i <span class='operator'>=</span> c<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, last <span class='operator'>=</span> c<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>; i <span class='operator'>!</span><span class='operator'>=</span> last; <span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
  <span class='keyword'>if</span> <span class='parenthesis'>(</span>pred<span class='parenthesis'>(</span><span class='operator'>*</span>i<span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
    i <span class='operator'>=</span> c<span class='operator'>.</span>erase<span class='parenthesis'>(</span>i<span class='parenthesis'>)</span>;
  <span class='curlybracket'>}</span> <span class='keyword'>else</span> <span class='curlybracket'>{</span>
    <span class='operator'>+</span><span class='operator'>+</span>i;
  <span class='curlybracket'>}</span>
<span class='curlybracket'>}</span>
<span class='keyword'>return</span> original_size <span class='operator'>-</span> c<span class='operator'>.</span>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
</span></div></div></div></div></div></div></div><div id='unord' class='section'><h2 ><a class='secnum' href='#unord' style='min-width:65pt'>24.5</a> Unordered associative containers <a class='abbr_ref' href='unord'>[unord]</a></h2><div id='unord.general' class='section'><h3 ><a class='secnum' href='#unord.general' style='min-width:80pt'>24.5.1</a> General <a class='abbr_ref' href='unord.general'>[unord.general]</a></h3><div class='para' id='unord.general-1'><div class='marginalizedparent'><a class='marginalized' href='#unord.general-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12072'>#</a></div><div class='texpara'><div id='unord.general-1.sentence-1' class='sentence'>The header <a href='#header:%3cunordered_map%3e' title='24.5.2&emsp;Header &lt;unordered_&shy;map&gt; synopsis&emsp;[unord.map.syn]'><span id='headerref:<unordered_map>'><span class='texttt'>&lt;unordered_<span class='shy'></span>map&gt;</span></span></a> defines the class
templates <span class='texttt'>unordered_<span class='shy'></span>map</span> and <span class='texttt'>unordered_<span class='shy'></span>multimap</span>;
the header <a href='#header:%3cunordered_set%3e' title='24.5.3&emsp;Header &lt;unordered_&shy;set&gt; synopsis&emsp;[unord.set.syn]'><span id='headerref:<unordered_set>'><span class='texttt'>&lt;unordered_<span class='shy'></span>set&gt;</span></span></a> defines the class
templates <span class='texttt'>unordered_<span class='shy'></span>set</span> and <span class='texttt'>unordered_<span class='shy'></span>multiset</span><a class='hidden_link' href='#unord.general-1.sentence-1'>.</a></div></div></div><div class='para' id='unord.general-2'><div class='marginalizedparent'><a class='marginalized' href='#unord.general-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12078'>#</a></div><div class='texpara'><div id='unord.general-2.sentence-1' class='sentence'>The exposition-only alias templates
<span class='texttt'><i >iter-value-type</i></span>, <span class='texttt'><i >iter-key-type</i></span>,
<span class='texttt'><i >iter-mapped-type</i></span>, <span class='texttt'><i >iter-to-alloc-type</i></span>,
<span class='texttt'><i >range-key-type</i></span>, <span class='texttt'><i >range-mapped-type</i></span>,
and <span class='texttt'><i >range-to-alloc-type</i></span>
defined in <a href='#associative.general' title='24.4.1&emsp;General'>[associative.<span class='shy'></span>general]</a> may appear in deduction guides for unordered containers<a class='hidden_link' href='#unord.general-2.sentence-1'>.</a></div></div></div></div><div id='unord.map.syn' class='section'><h3 ><a class='secnum' href='#unord.map.syn' style='min-width:80pt'>24.5.2</a> Header <span class='texttt'>&lt;unordered_<span class='shy'></span>map&gt;</span> synopsis <a class='abbr_ref' href='unord.map.syn'>[unord.map.syn]</a></h3><div class='texpara'><span id='lib:unordered_multimap'><span id='lib:unordered_map'><span id='header:<unordered_map>'><div class='marginalizedparent'><a class='itemDeclLink' href='#header:%3cunordered_map%3e'>🔗</a></div><span class='codeblock'><span class='preprocessordirective'>#include</span> <span class='anglebracket'>&lt;</span>compare<span class='anglebracket'>&gt;</span>              <span class='comment'>// see <a href='compare.syn' title='17.11.1&emsp;Header &lt;compare&gt; synopsis'>[compare.<span class='shy'></span>syn]</a></span>
<span class='preprocessordirective'>#include</span> <span class='anglebracket'>&lt;</span>initializer_list<span class='anglebracket'>&gt;</span>     <span class='comment'>// see <a href='initializer.list.syn' title='17.10.2&emsp;Header &lt;initializer_&shy;list&gt; synopsis'>[initializer.<span class='shy'></span>list.<span class='shy'></span>syn]</a></span>

<span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='comment'>// <a href='#unord.map' title='24.5.4&emsp;Class template unordered_&shy;map'>[unord.<span class='shy'></span>map]</a>, class template <span class='tcode_in_codeblock'>unordered_<span class='shy'></span>map</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key,
           <span class='keyword'>class</span> T,
           <span class='keyword'>class</span> Hash <span class='operator'>=</span> hash<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Pred <span class='operator'>=</span> equal_to<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Alloc <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span>pair<span class='anglebracket'>&lt;</span><span class='keyword'>const</span> Key, T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    <span class='keyword'>class</span> unordered_map;

  <span class='comment'>// <a href='#unord.multimap' title='24.5.5&emsp;Class template unordered_&shy;multimap'>[unord.<span class='shy'></span>multimap]</a>, class template <span class='tcode_in_codeblock'>unordered_<span class='shy'></span>multimap</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key,
           <span class='keyword'>class</span> T,
           <span class='keyword'>class</span> Hash <span class='operator'>=</span> hash<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Pred <span class='operator'>=</span> equal_to<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Alloc <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span>pair<span class='anglebracket'>&lt;</span><span class='keyword'>const</span> Key, T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    <span class='keyword'>class</span> unordered_multimap;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Hash, <span class='keyword'>class</span> Pred, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> unordered_map<span class='anglebracket'>&lt;</span>Key, T, Hash, Pred, Alloc<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> a,
                    <span class='keyword'>const</span> unordered_map<span class='anglebracket'>&lt;</span>Key, T, Hash, Pred, Alloc<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> b<span class='parenthesis'>)</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Hash, <span class='keyword'>class</span> Pred, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> unordered_multimap<span class='anglebracket'>&lt;</span>Key, T, Hash, Pred, Alloc<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> a,
                    <span class='keyword'>const</span> unordered_multimap<span class='anglebracket'>&lt;</span>Key, T, Hash, Pred, Alloc<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> b<span class='parenthesis'>)</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Hash, <span class='keyword'>class</span> Pred, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> swap<span class='parenthesis'>(</span>unordered_map<span class='anglebracket'>&lt;</span>Key, T, Hash, Pred, Alloc<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x,
              unordered_map<span class='anglebracket'>&lt;</span>Key, T, Hash, Pred, Alloc<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>
      <span class='keyword'>noexcept</span><span class='parenthesis'>(</span><span class='keyword'>noexcept</span><span class='parenthesis'>(</span>x<span class='operator'>.</span>swap<span class='parenthesis'>(</span>y<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Hash, <span class='keyword'>class</span> Pred, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> swap<span class='parenthesis'>(</span>unordered_multimap<span class='anglebracket'>&lt;</span>Key, T, Hash, Pred, Alloc<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x,
              unordered_multimap<span class='anglebracket'>&lt;</span>Key, T, Hash, Pred, Alloc<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>
      <span class='keyword'>noexcept</span><span class='parenthesis'>(</span><span class='keyword'>noexcept</span><span class='parenthesis'>(</span>x<span class='operator'>.</span>swap<span class='parenthesis'>(</span>y<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;

  <span class='comment'>// <a href='#unord.map.erasure' title='24.5.4.5&emsp;Erasure'>[unord.<span class='shy'></span>map.<span class='shy'></span>erasure]</a>, erasure for <span class='tcode_in_codeblock'>unordered_<span class='shy'></span>map</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K, <span class='keyword'>class</span> T, <span class='keyword'>class</span> H, <span class='keyword'>class</span> P, <span class='keyword'>class</span> A, <span class='keyword'>class</span> Predicate<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>typename</span> unordered_map<span class='anglebracket'>&lt;</span>K, T, H, P, A<span class='anglebracket'>&gt;</span><span class='operator'>::</span>size_type
      erase_if<span class='parenthesis'>(</span>unordered_map<span class='anglebracket'>&lt;</span>K, T, H, P, A<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> c, Predicate pred<span class='parenthesis'>)</span>;

  <span class='comment'>// <a href='#unord.multimap.erasure' title='24.5.5.4&emsp;Erasure'>[unord.<span class='shy'></span>multimap.<span class='shy'></span>erasure]</a>, erasure for <span class='tcode_in_codeblock'>unordered_<span class='shy'></span>multimap</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K, <span class='keyword'>class</span> T, <span class='keyword'>class</span> H, <span class='keyword'>class</span> P, <span class='keyword'>class</span> A, <span class='keyword'>class</span> Predicate<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>typename</span> unordered_multimap<span class='anglebracket'>&lt;</span>K, T, H, P, A<span class='anglebracket'>&gt;</span><span class='operator'>::</span>size_type
      erase_if<span class='parenthesis'>(</span>unordered_multimap<span class='anglebracket'>&lt;</span>K, T, H, P, A<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> c, Predicate pred<span class='parenthesis'>)</span>;

  <span class='keyword'>namespace</span> pmr <span class='curlybracket'>{</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key,
             <span class='keyword'>class</span> T,
             <span class='keyword'>class</span> Hash <span class='operator'>=</span> hash<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>,
             <span class='keyword'>class</span> Pred <span class='operator'>=</span> equal_to<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
      <span class='keyword'>using</span> unordered_map <span class='operator'>=</span>
        std<span class='operator'>::</span>unordered_map<span class='anglebracket'>&lt;</span>Key, T, Hash, Pred,
                           polymorphic_allocator<span class='anglebracket'>&lt;</span>pair<span class='anglebracket'>&lt;</span><span class='keyword'>const</span> Key, T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key,
             <span class='keyword'>class</span> T,
             <span class='keyword'>class</span> Hash <span class='operator'>=</span> hash<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>,
             <span class='keyword'>class</span> Pred <span class='operator'>=</span> equal_to<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
      <span class='keyword'>using</span> unordered_multimap <span class='operator'>=</span>
        std<span class='operator'>::</span>unordered_multimap<span class='anglebracket'>&lt;</span>Key, T, Hash, Pred,
                                polymorphic_allocator<span class='anglebracket'>&lt;</span>pair<span class='anglebracket'>&lt;</span><span class='keyword'>const</span> Key, T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;

  <span class='curlybracket'>}</span>
<span class='curlybracket'>}</span>
</span></span></span></span></div></div><div id='unord.set.syn' class='section'><h3 ><a class='secnum' href='#unord.set.syn' style='min-width:80pt'>24.5.3</a> Header <span class='texttt'>&lt;unordered_<span class='shy'></span>set&gt;</span> synopsis <a class='abbr_ref' href='unord.set.syn'>[unord.set.syn]</a></h3><div class='texpara'><span id='lib:unordered_multiset'><span id='lib:unordered_set'><span id='header:<unordered_set>'><div class='marginalizedparent'><a class='itemDeclLink' href='#header:%3cunordered_set%3e'>🔗</a></div><span class='codeblock'><span class='preprocessordirective'>#include</span> <span class='anglebracket'>&lt;</span>compare<span class='anglebracket'>&gt;</span>              <span class='comment'>// see <a href='compare.syn' title='17.11.1&emsp;Header &lt;compare&gt; synopsis'>[compare.<span class='shy'></span>syn]</a></span>
<span class='preprocessordirective'>#include</span> <span class='anglebracket'>&lt;</span>initializer_list<span class='anglebracket'>&gt;</span>     <span class='comment'>// see <a href='initializer.list.syn' title='17.10.2&emsp;Header &lt;initializer_&shy;list&gt; synopsis'>[initializer.<span class='shy'></span>list.<span class='shy'></span>syn]</a></span>

<span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='comment'>// <a href='#unord.set' title='24.5.6&emsp;Class template unordered_&shy;set'>[unord.<span class='shy'></span>set]</a>, class template <span class='tcode_in_codeblock'>unordered_<span class='shy'></span>set</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key,
           <span class='keyword'>class</span> Hash <span class='operator'>=</span> hash<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Pred <span class='operator'>=</span> equal_to<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Alloc <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    <span class='keyword'>class</span> unordered_set;

  <span class='comment'>// <a href='#unord.multiset' title='24.5.7&emsp;Class template unordered_&shy;multiset'>[unord.<span class='shy'></span>multiset]</a>, class template <span class='tcode_in_codeblock'>unordered_<span class='shy'></span>multiset</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key,
           <span class='keyword'>class</span> Hash <span class='operator'>=</span> hash<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Pred <span class='operator'>=</span> equal_to<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Alloc <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    <span class='keyword'>class</span> unordered_multiset;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> Hash, <span class='keyword'>class</span> Pred, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> unordered_set<span class='anglebracket'>&lt;</span>Key, Hash, Pred, Alloc<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> a,
                    <span class='keyword'>const</span> unordered_set<span class='anglebracket'>&lt;</span>Key, Hash, Pred, Alloc<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> b<span class='parenthesis'>)</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> Hash, <span class='keyword'>class</span> Pred, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> unordered_multiset<span class='anglebracket'>&lt;</span>Key, Hash, Pred, Alloc<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> a,
                    <span class='keyword'>const</span> unordered_multiset<span class='anglebracket'>&lt;</span>Key, Hash, Pred, Alloc<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> b<span class='parenthesis'>)</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> Hash, <span class='keyword'>class</span> Pred, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> swap<span class='parenthesis'>(</span>unordered_set<span class='anglebracket'>&lt;</span>Key, Hash, Pred, Alloc<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x,
              unordered_set<span class='anglebracket'>&lt;</span>Key, Hash, Pred, Alloc<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>
      <span class='keyword'>noexcept</span><span class='parenthesis'>(</span><span class='keyword'>noexcept</span><span class='parenthesis'>(</span>x<span class='operator'>.</span>swap<span class='parenthesis'>(</span>y<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> Hash, <span class='keyword'>class</span> Pred, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> swap<span class='parenthesis'>(</span>unordered_multiset<span class='anglebracket'>&lt;</span>Key, Hash, Pred, Alloc<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x,
              unordered_multiset<span class='anglebracket'>&lt;</span>Key, Hash, Pred, Alloc<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>
      <span class='keyword'>noexcept</span><span class='parenthesis'>(</span><span class='keyword'>noexcept</span><span class='parenthesis'>(</span>x<span class='operator'>.</span>swap<span class='parenthesis'>(</span>y<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;

  <span class='comment'>// <a href='#unord.set.erasure' title='24.5.6.3&emsp;Erasure'>[unord.<span class='shy'></span>set.<span class='shy'></span>erasure]</a>, erasure for <span class='tcode_in_codeblock'>unordered_<span class='shy'></span>set</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K, <span class='keyword'>class</span> H, <span class='keyword'>class</span> P, <span class='keyword'>class</span> A, <span class='keyword'>class</span> Predicate<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>typename</span> unordered_set<span class='anglebracket'>&lt;</span>K, H, P, A<span class='anglebracket'>&gt;</span><span class='operator'>::</span>size_type
      erase_if<span class='parenthesis'>(</span>unordered_set<span class='anglebracket'>&lt;</span>K, H, P, A<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> c, Predicate pred<span class='parenthesis'>)</span>;

  <span class='comment'>// <a href='#unord.multiset.erasure' title='24.5.7.3&emsp;Erasure'>[unord.<span class='shy'></span>multiset.<span class='shy'></span>erasure]</a>, erasure for <span class='tcode_in_codeblock'>unordered_<span class='shy'></span>multiset</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K, <span class='keyword'>class</span> H, <span class='keyword'>class</span> P, <span class='keyword'>class</span> A, <span class='keyword'>class</span> Predicate<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>typename</span> unordered_multiset<span class='anglebracket'>&lt;</span>K, H, P, A<span class='anglebracket'>&gt;</span><span class='operator'>::</span>size_type
      erase_if<span class='parenthesis'>(</span>unordered_multiset<span class='anglebracket'>&lt;</span>K, H, P, A<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> c, Predicate pred<span class='parenthesis'>)</span>;

  <span class='keyword'>namespace</span> pmr <span class='curlybracket'>{</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key,
             <span class='keyword'>class</span> Hash <span class='operator'>=</span> hash<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>,
             <span class='keyword'>class</span> Pred <span class='operator'>=</span> equal_to<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
      <span class='keyword'>using</span> unordered_set <span class='operator'>=</span> std<span class='operator'>::</span>unordered_set<span class='anglebracket'>&lt;</span>Key, Hash, Pred,
                                               polymorphic_allocator<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;

    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key,
             <span class='keyword'>class</span> Hash <span class='operator'>=</span> hash<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>,
             <span class='keyword'>class</span> Pred <span class='operator'>=</span> equal_to<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
      <span class='keyword'>using</span> unordered_multiset <span class='operator'>=</span> std<span class='operator'>::</span>unordered_multiset<span class='anglebracket'>&lt;</span>Key, Hash, Pred,
                                                         polymorphic_allocator<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;
  <span class='curlybracket'>}</span>
<span class='curlybracket'>}</span>
</span></span></span></span></div></div><div id='unord.map' class='section'><h3 ><a class='secnum' href='#unord.map' style='min-width:80pt'>24.5.4</a> Class template <span class='texttt'>unordered_<span class='shy'></span>map</span> <a class='abbr_ref' href='unord.map'>[unord.map]</a></h3><div class='texpara'><a class='index' id='lib:unordered_map_'></a></div><div id='unord.map.overview' class='section'><h4 ><a class='secnum' href='#unord.map.overview' style='min-width:95pt'>24.5.4.1</a> Overview <a class='abbr_ref' href='unord.map.overview'>[unord.map.overview]</a></h4><div class='para' id='unord.map.overview-1'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.overview-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12233'>#</a></div><div class='texpara'><div id='unord.map.overview-1.sentence-1' class='sentence'><a class='index' id=':unordered_map,unique_keys'></a><a class='index' id=':unordered_associative_containers,unique_keys__'></a>An <span class='texttt'>unordered_<span class='shy'></span>map</span> is an unordered associative container that
supports unique keys (an <span class='texttt'>unordered_<span class='shy'></span>map</span> contains at most one of each
key value) and that associates values of another type
<span class='texttt'>mapped_<span class='shy'></span>type</span> with the keys<a class='hidden_link' href='#unord.map.overview-1.sentence-1'>.</a></div> <div id='unord.map.overview-1.sentence-2' class='sentence'>The <span class='texttt'>unordered_<span class='shy'></span>map</span> class
supports forward iterators<a class='hidden_link' href='#unord.map.overview-1.sentence-2'>.</a></div></div></div><div class='para' id='unord.map.overview-2'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.overview-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12243'>#</a></div><div class='texpara'><div id='unord.map.overview-2.sentence-1' class='sentence'>An <span class='texttt'>unordered_<span class='shy'></span>map</span> meets all of the requirements
of a container (<a href='#container.reqmts' title='24.2.2.2&emsp;Container requirements'>[container.<span class='shy'></span>reqmts]</a>),
of an allocator-aware container (<a href='#container.alloc.reqmts' title='24.2.2.5&emsp;Allocator-aware containers'>[container.<span class='shy'></span>alloc.<span class='shy'></span>reqmts]</a>), and
of an unordered associative container (<a href='#unord.req' title='24.2.8&emsp;Unordered associative containers'>[unord.<span class='shy'></span>req]</a>)<a class='hidden_link' href='#unord.map.overview-2.sentence-1'>.</a></div> <div id='unord.map.overview-2.sentence-2' class='sentence'>It provides the operations described in the preceding requirements table for unique keys;
that is, an <span class='texttt'>unordered_<span class='shy'></span>map</span> supports the <span class='texttt'>a_<span class='shy'></span>uniq</span> operations in that table,
not the <span class='texttt'>a_<span class='shy'></span>eq</span> operations<a class='hidden_link' href='#unord.map.overview-2.sentence-2'>.</a></div> <div id='unord.map.overview-2.sentence-3' class='sentence'>For an <span class='texttt'>unordered_<span class='shy'></span>map<span class='anglebracket'>&lt;</span>Key, T<span class='anglebracket'>&gt;</span></span> the <span class='texttt'>key_<span class='shy'></span>type</span> is <span class='texttt'>Key</span>,
the <span class='texttt'>mapped_<span class='shy'></span>type</span> is <span class='texttt'>T</span>,
and the <span class='texttt'>value_<span class='shy'></span>type</span> is <span class='texttt'>pair<span class='anglebracket'>&lt;</span><span class='keyword'>const</span> Key, T<span class='anglebracket'>&gt;</span></span><a class='hidden_link' href='#unord.map.overview-2.sentence-3'>.</a></div></div></div><div class='para' id='unord.map.overview-3'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.overview-3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12255'>#</a></div><div class='texpara'><div id='unord.map.overview-3.sentence-1' class='sentence'>Subclause <a href='#unord.map' title='24.5.4&emsp;Class template unordered_&shy;map'>[unord.<span class='shy'></span>map]</a> only describes operations on <span class='texttt'>unordered_<span class='shy'></span>map</span> that
are not described in one of the requirement tables, or for which there
is additional semantic information<a class='hidden_link' href='#unord.map.overview-3.sentence-1'>.</a></div></div>

<div class='para added' id='unordered_map.overview-4'><div class='marginalizedparent'><a class='marginalized' href='#unordered_map.overview-4'>4</a></div><div class='sourceLinkParent'><a class='sourceLink' href=''>#</a></div>
<div class='texpara'>The types <span class="texttt">iterator</span> and <span class="texttt">const_iterator</span> meet the constexpr iterator requirements (<a href="iterator.requirements.general" title="25.3.1 General">[iterator.<span class="shy"></span>requirements.<span class="shy"></span>general]</a>).</div></div>

<div class='texpara'><span id='lib:unordered_map__'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:unordered_map__'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key,
           <span class='keyword'>class</span> T,
           <span class='keyword'>class</span> Hash <span class='operator'>=</span> hash<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Pred <span class='operator'>=</span> equal_to<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span>pair<span class='anglebracket'>&lt;</span><span class='keyword'>const</span> Key, T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> unordered_map <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> key_type             <span class='operator'>=</span> Key;
    <span class='keyword'>using</span> mapped_type          <span class='operator'>=</span> T;
    <span class='keyword'>using</span> value_type           <span class='operator'>=</span> pair<span class='anglebracket'>&lt;</span><span class='keyword'>const</span> Key, T<span class='anglebracket'>&gt;</span>;
    <span class='keyword'>using</span> hasher               <span class='operator'>=</span> Hash;
    <span class='keyword'>using</span> key_equal            <span class='operator'>=</span> Pred;
    <span class='keyword'>using</span> allocator_type       <span class='operator'>=</span> Allocator;
    <span class='keyword'>using</span> pointer              <span class='operator'>=</span> <span class='keyword'>typename</span> allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>pointer;
    <span class='keyword'>using</span> const_pointer        <span class='operator'>=</span> <span class='keyword'>typename</span> allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>const_pointer;
    <span class='keyword'>using</span> reference            <span class='operator'>=</span> value_type<span class='operator'>&amp;</span>;
    <span class='keyword'>using</span> const_reference      <span class='operator'>=</span> <span class='keyword'>const</span> value_type<span class='operator'>&amp;</span>;
    <span class='keyword'>using</span> size_type            <span class='operator'>=</span> <a class='index' id=':type_of_unordered_map::size_type'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> difference_type      <span class='operator'>=</span> <a class='index' id=':type_of_unordered_map::difference_type'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>

    <span class='keyword'>using</span> iterator             <span class='operator'>=</span> <a class='index' id=':type_of_unordered_map::iterator'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> const_iterator       <span class='operator'>=</span> <a class='index' id=':type_of_unordered_map::const_iterator'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> local_iterator       <span class='operator'>=</span> <a class='index' id=':type_of_unordered_map::local_iterator'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> const_local_iterator <span class='operator'>=</span> <a class='index' id=':type_of_unordered_map::const_local_iterator'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> node_type            <span class='operator'>=</span> <i ><span class='texttt'>unspecified</span></i>;
    <span class='keyword'>using</span> insert_return_type   <span class='operator'>=</span> <i >insert-return-type</i><span class='anglebracket'>&lt;</span>iterator, node_type<span class='anglebracket'>&gt;</span>;

    <span class='comment'>// <a href='#unord.map.cnstr' title='24.5.4.2&emsp;Constructors'>[unord.<span class='shy'></span>map.<span class='shy'></span>cnstr]</a>, construct/copy/destroy</span>
    <span class="keyword added">constexpr</span> unordered_map<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> unordered_map<span class='parenthesis'>(</span>size_type n,
                           <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf <span class='operator'>=</span> hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                           <span class='keyword'>const</span> key_equal<span class='operator'>&amp;</span> eql <span class='operator'>=</span> key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                           <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a <span class='operator'>=</span> allocator_type<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> unordered_map<span class='parenthesis'>(</span>InputIterator f, InputIterator l,
                    size_type n <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>,
                    <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf <span class='operator'>=</span> hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                    <span class='keyword'>const</span> key_equal<span class='operator'>&amp;</span> eql <span class='operator'>=</span> key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                    <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a <span class='operator'>=</span> allocator_type<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;

    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> unordered_map<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, size_type n <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>,
        <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf <span class='operator'>=</span> hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, <span class='keyword'>const</span> key_equal<span class='operator'>&amp;</span> eql <span class='operator'>=</span> key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
        <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a <span class='operator'>=</span> allocator_type<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> unordered_map<span class='parenthesis'>(</span><span class='keyword'>const</span> unordered_map<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> unordered_map<span class='parenthesis'>(</span>unordered_map<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> unordered_map<span class='parenthesis'>(</span><span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> unordered_map<span class='parenthesis'>(</span><span class='keyword'>const</span> unordered_map<span class='operator'>&amp;</span>, <span class='keyword'>const</span> type_identity_t<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> unordered_map<span class='parenthesis'>(</span>unordered_map<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, <span class='keyword'>const</span> type_identity_t<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> unordered_map<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il,
                  size_type n <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>,
                  <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf <span class='operator'>=</span> hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                  <span class='keyword'>const</span> key_equal<span class='operator'>&amp;</span> eql <span class='operator'>=</span> key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                  <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a <span class='operator'>=</span> allocator_type<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> unordered_map<span class='parenthesis'>(</span>size_type n, <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>
      <span class='operator'>:</span> unordered_map<span class='parenthesis'>(</span>n, hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> unordered_map<span class='parenthesis'>(</span>size_type n, <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf, <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>
      <span class='operator'>:</span> unordered_map<span class='parenthesis'>(</span>n, hf, key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> unordered_map<span class='parenthesis'>(</span>InputIterator f, InputIterator l, size_type n, <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>
        <span class='operator'>:</span> unordered_map<span class='parenthesis'>(</span>f, l, n, hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> unordered_map<span class='parenthesis'>(</span>InputIterator f, InputIterator l, size_type n, <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf,
                    <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>
        <span class='operator'>:</span> unordered_map<span class='parenthesis'>(</span>f, l, n, hf, key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range_________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> unordered_map<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, size_type n, <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>
        <span class='operator'>:</span> unordered_map<span class='parenthesis'>(</span>from_range, std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>rg<span class='parenthesis'>)</span>, n, hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range__________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> unordered_map<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, size_type n, <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf, <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>
        <span class='operator'>:</span> unordered_map<span class='parenthesis'>(</span>from_range, std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>rg<span class='parenthesis'>)</span>, n, hf, key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> unordered_map<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il, size_type n, <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>
      <span class='operator'>:</span> unordered_map<span class='parenthesis'>(</span>il, n, hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> unordered_map<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il, size_type n, <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf,
                  <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>
      <span class='operator'>:</span> unordered_map<span class='parenthesis'>(</span>il, n, hf, key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> <span class='operator'>~</span>unordered_map<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> unordered_map<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> unordered_map<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> unordered_map<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span>unordered_map<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span>
      <span class='keyword'>noexcept</span><span class='parenthesis'>(</span>allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>is_always_equal<span class='operator'>::</span>value <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
               is_nothrow_move_assignable_v<span class='anglebracket'>&lt;</span>Hash<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
               is_nothrow_move_assignable_v<span class='anglebracket'>&lt;</span>Pred<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> unordered_map<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> allocator_type get_allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// iterators</span>
    <span class="keyword added">constexpr</span> iterator       begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> iterator       end<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator end<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator cbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator cend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// capacity</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> size_type size<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> size_type max_size<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// <a href='#unord.map.modifiers' title='24.5.4.4&emsp;Modifiers'>[unord.<span class='shy'></span>map.<span class='shy'></span>modifiers]</a>, modifiers</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> emplace<span class='parenthesis'>(</span>Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator emplace_hint<span class='parenthesis'>(</span>const_iterator position, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> insert<span class='parenthesis'>(</span><span class='keyword'>const</span> value_type<span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> insert<span class='parenthesis'>(</span>value_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> P<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> insert<span class='parenthesis'>(</span>P<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator       insert<span class='parenthesis'>(</span>const_iterator hint, <span class='keyword'>const</span> value_type<span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator       insert<span class='parenthesis'>(</span>const_iterator hint, value_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> P<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator hint, P<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert<span class='parenthesis'>(</span>InputIterator first, InputIterator last<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range___________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert_range<span class='parenthesis'>(</span>R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> node_type extract<span class='parenthesis'>(</span>const_iterator position<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> node_type extract<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> node_type extract<span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> insert_return_type insert<span class='parenthesis'>(</span>node_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> nh<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator           insert<span class='parenthesis'>(</span>const_iterator hint, node_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> nh<span class='parenthesis'>)</span>;

    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> try_emplace<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> try_emplace<span class='parenthesis'>(</span>key_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K, <span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> try_emplace<span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> iterator try_emplace<span class='parenthesis'>(</span>const_iterator hint, <span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> iterator try_emplace<span class='parenthesis'>(</span>const_iterator hint, key_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K, <span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> iterator try_emplace<span class='parenthesis'>(</span>const_iterator hint, K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> M<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> insert_or_assign<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k, M<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> M<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> insert_or_assign<span class='parenthesis'>(</span>key_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, M<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K, <span class='keyword'>class</span> M<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> insert_or_assign<span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, M<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> M<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> iterator insert_or_assign<span class='parenthesis'>(</span>const_iterator hint, <span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k, M<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> M<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> iterator insert_or_assign<span class='parenthesis'>(</span>const_iterator hint, key_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, M<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K, <span class='keyword'>class</span> M<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> iterator insert_or_assign<span class='parenthesis'>(</span>const_iterator hint, K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, M<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> iterator  erase<span class='parenthesis'>(</span>iterator position<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator  erase<span class='parenthesis'>(</span>const_iterator position<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> size_type erase<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> size_type erase<span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator  erase<span class='parenthesis'>(</span>const_iterator first, const_iterator last<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span>      swap<span class='parenthesis'>(</span>unordered_map<span class='operator'>&amp;</span><span class='parenthesis'>)</span>
      <span class='keyword'>noexcept</span><span class='parenthesis'>(</span>allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>is_always_equal<span class='operator'>::</span>value <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
               is_nothrow_swappable_v<span class='anglebracket'>&lt;</span>Hash<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
               is_nothrow_swappable_v<span class='anglebracket'>&lt;</span>Pred<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span>      clear<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;

    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> H2, <span class='keyword'>class</span> P2<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>unordered_map<span class='anglebracket'>&lt;</span>Key, T, H2, P2, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> source<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> H2, <span class='keyword'>class</span> P2<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>unordered_map<span class='anglebracket'>&lt;</span>Key, T, H2, P2, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span><span class='operator'>&amp;</span> source<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> H2, <span class='keyword'>class</span> P2<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>unordered_multimap<span class='anglebracket'>&lt;</span>Key, T, H2, P2, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> source<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> H2, <span class='keyword'>class</span> P2<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>unordered_multimap<span class='anglebracket'>&lt;</span>Key, T, H2, P2, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span><span class='operator'>&amp;</span> source<span class='parenthesis'>)</span>;

    <span class='comment'>// observers</span>
    <span class="keyword added">constexpr</span> hasher hash_function<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> key_equal key_eq<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// map operations</span>
    <span class="keyword added">constexpr</span> iterator         find<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> const_iterator   find<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> iterator       find<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> const_iterator find<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> size_type        count<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> size_type      count<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>bool</span>             contains<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>bool</span>           contains<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, iterator<span class='anglebracket'>&gt;</span>               equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>const_iterator, const_iterator<span class='anglebracket'>&gt;</span>   equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, iterator<span class='anglebracket'>&gt;</span>             equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>const_iterator, const_iterator<span class='anglebracket'>&gt;</span> equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// <a href='#unord.map.elem' title='24.5.4.3&emsp;Element access'>[unord.<span class='shy'></span>map.<span class='shy'></span>elem]</a>, element access</span>
    <span class="keyword added">constexpr</span> mapped_type<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='squarebracket'>[</span><span class='squarebracket'>]</span><span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> mapped_type<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='squarebracket'>[</span><span class='squarebracket'>]</span><span class='parenthesis'>(</span>key_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> mapped_type<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='squarebracket'>[</span><span class='squarebracket'>]</span><span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> mapped_type<span class='operator'>&amp;</span> at<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>const</span> mapped_type<span class='operator'>&amp;</span> at<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> mapped_type<span class='operator'>&amp;</span> at<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> <span class='keyword'>const</span> mapped_type<span class='operator'>&amp;</span> at<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// bucket interface</span>
    <span class="keyword added">constexpr</span> size_type bucket_count<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> size_type max_bucket_count<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> size_type bucket_size<span class='parenthesis'>(</span>size_type n<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> size_type bucket<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> size_type bucket<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> local_iterator begin<span class='parenthesis'>(</span>size_type n<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> const_local_iterator begin<span class='parenthesis'>(</span>size_type n<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> local_iterator end<span class='parenthesis'>(</span>size_type n<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> const_local_iterator end<span class='parenthesis'>(</span>size_type n<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> const_local_iterator cbegin<span class='parenthesis'>(</span>size_type n<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> const_local_iterator cend<span class='parenthesis'>(</span>size_type n<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// hash policy</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>float</span> load_factor<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>float</span> max_load_factor<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> max_load_factor<span class='parenthesis'>(</span><span class='keyword'>float</span> z<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> rehash<span class='parenthesis'>(</span>size_type n<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> reserve<span class='parenthesis'>(</span>size_type n<span class='parenthesis'>)</span>;
  <span class='curlybracket'>}</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator,
           <span class='keyword'>class</span> Hash <span class='operator'>=</span> hash<span class='anglebracket'>&lt;</span><i >iter-key-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Pred <span class='operator'>=</span> equal_to<span class='anglebracket'>&lt;</span><i >iter-key-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span><i >iter-to-alloc-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    unordered_map<span class='parenthesis'>(</span>InputIterator, InputIterator, <span class='keyword'>typename</span> <i ><span class='texttt'>see below</span></i><span class='operator'>::</span>size_type <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>,
                  Hash <span class='operator'>=</span> Hash<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, Pred <span class='operator'>=</span> Pred<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, Allocator <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_map<span class='anglebracket'>&lt;</span><i >iter-key-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>, <i >iter-mapped-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>, Hash, Pred,
                       Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range________________'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R, <span class='keyword'>class</span> Hash <span class='operator'>=</span> hash<span class='anglebracket'>&lt;</span><i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Pred <span class='operator'>=</span> equal_to<span class='anglebracket'>&lt;</span><i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span><i >range-to-alloc-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    unordered_map<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, <span class='keyword'>typename</span> <i ><span class='texttt'>see below</span></i><span class='operator'>::</span>size_type <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>,
                  Hash <span class='operator'>=</span> Hash<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, Pred <span class='operator'>=</span> Pred<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, Allocator <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_map<span class='anglebracket'>&lt;</span><i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, <i >range-mapped-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, Hash, Pred, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Hash <span class='operator'>=</span> hash<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Pred <span class='operator'>=</span> equal_to<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>, <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span>pair<span class='anglebracket'>&lt;</span><span class='keyword'>const</span> Key, T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    unordered_map<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>pair<span class='anglebracket'>&lt;</span>Key, T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
                  <span class='keyword'>typename</span> <i ><span class='texttt'>see below</span></i><span class='operator'>::</span>size_type <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>, Hash <span class='operator'>=</span> Hash<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                  Pred <span class='operator'>=</span> Pred<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, Allocator <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_map<span class='anglebracket'>&lt;</span>Key, T, Hash, Pred, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    unordered_map<span class='parenthesis'>(</span>InputIterator, InputIterator, <span class='keyword'>typename</span> <i ><span class='texttt'>see below</span></i><span class='operator'>::</span>size_type, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_map<span class='anglebracket'>&lt;</span><i >iter-key-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>, <i >iter-mapped-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>,
                       hash<span class='anglebracket'>&lt;</span><i >iter-key-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
                       equal_to<span class='anglebracket'>&lt;</span><i >iter-key-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    unordered_map<span class='parenthesis'>(</span>InputIterator, InputIterator, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_map<span class='anglebracket'>&lt;</span><i >iter-key-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>, <i >iter-mapped-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>,
                       hash<span class='anglebracket'>&lt;</span><i >iter-key-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
                       equal_to<span class='anglebracket'>&lt;</span><i >iter-key-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Hash, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    unordered_map<span class='parenthesis'>(</span>InputIterator, InputIterator, <span class='keyword'>typename</span> <i ><span class='texttt'>see below</span></i><span class='operator'>::</span>size_type, Hash, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_map<span class='anglebracket'>&lt;</span><i >iter-key-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>, <i >iter-mapped-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>, Hash,
                       equal_to<span class='anglebracket'>&lt;</span><i >iter-key-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range_________________'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    unordered_map<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, <span class='keyword'>typename</span> <i ><span class='texttt'>see below</span></i><span class='operator'>::</span>size_type, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_map<span class='anglebracket'>&lt;</span><i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, <i >range-mapped-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, hash<span class='anglebracket'>&lt;</span><i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
                       equal_to<span class='anglebracket'>&lt;</span><i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range__________________'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    unordered_map<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_map<span class='anglebracket'>&lt;</span><i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, <i >range-mapped-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, hash<span class='anglebracket'>&lt;</span><i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
                       equal_to<span class='anglebracket'>&lt;</span><i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range___________________'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R, <span class='keyword'>class</span> Hash, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    unordered_map<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, <span class='keyword'>typename</span> <i ><span class='texttt'>see below</span></i><span class='operator'>::</span>size_type, Hash, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_map<span class='anglebracket'>&lt;</span><i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, <i >range-mapped-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, Hash,
                       equal_to<span class='anglebracket'>&lt;</span><i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    unordered_map<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>pair<span class='anglebracket'>&lt;</span>Key, T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>, <span class='keyword'>typename</span> <i ><span class='texttt'>see below</span></i><span class='operator'>::</span>size_type,
                  Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_map<span class='anglebracket'>&lt;</span>Key, T, hash<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>, equal_to<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    unordered_map<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>pair<span class='anglebracket'>&lt;</span>Key, T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_map<span class='anglebracket'>&lt;</span>Key, T, hash<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>, equal_to<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Hash, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    unordered_map<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>pair<span class='anglebracket'>&lt;</span>Key, T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>, <span class='keyword'>typename</span> <i ><span class='texttt'>see below</span></i><span class='operator'>::</span>size_type, Hash,
                  Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_map<span class='anglebracket'>&lt;</span>Key, T, Hash, equal_to<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>}</span>
</span></span></div></div><div class='para' id='unord.map.overview-4'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.overview-4'>4</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12552'>#</a></div><div class='texpara'><div id='unord.map.overview-4.sentence-1' class='sentence'>A <span class='texttt'>size_<span class='shy'></span>type</span> parameter type in an <span class='texttt'>unordered_<span class='shy'></span>map</span> deduction guide
refers to the <span class='texttt'>size_<span class='shy'></span>type</span> member type of the type deduced by the deduction guide<a class='hidden_link' href='#unord.map.overview-4.sentence-1'>.</a></div></div></div></div><div id='unord.map.cnstr' class='section'><h4 ><a class='secnum' href='#unord.map.cnstr' style='min-width:95pt'>24.5.4.2</a> Constructors <a class='abbr_ref' href='unord.map.cnstr'>[unord.map.cnstr]</a></h4><div class='texpara'><div id='lib:unordered_map,constructor_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:unordered_map,constructor_'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> unordered_map<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>:</span> unordered_map<span class='parenthesis'>(</span>size_type<span class='parenthesis'>(</span><i ><span class='texttt'>see below</span></i><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
<span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> unordered_map<span class='parenthesis'>(</span>size_type n,
                       <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf <span class='operator'>=</span> hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                       <span class='keyword'>const</span> key_equal<span class='operator'>&amp;</span> eql <span class='operator'>=</span> key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                       <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a <span class='operator'>=</span> allocator_type<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='unord.map.cnstr-1'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.cnstr-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12568'>#</a></div><div class='texpara'><div id='unord.map.cnstr-1.sentence-1' class='sentence'><i >Effects</i>: Constructs an empty <span class='texttt'>unordered_<span class='shy'></span>map</span> using the
specified hash function, key equality predicate, and allocator, and
using at least <span class='texttt'>n</span> buckets<a class='hidden_link' href='#unord.map.cnstr-1.sentence-1'>.</a></div> <div id='unord.map.cnstr-1.sentence-2' class='sentence'>For the default constructor,
the number of buckets is <a class='index' id=':default_number_of_buckets_in_unordered_map'></a>implementation-defined<a class='hidden_link' href='#unord.map.cnstr-1.sentence-2'>.</a></div> <div id='unord.map.cnstr-1.sentence-3' class='sentence'><span class='texttt'>max_<span class='shy'></span>load_<span class='shy'></span>factor<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> returns <span class='texttt'><span class='literal'>1.0</span></span><a class='hidden_link' href='#unord.map.cnstr-1.sentence-3'>.</a></div></div></div></div><div class='para' id='unord.map.cnstr-2'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.cnstr-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12577'>#</a></div><div class='texpara'><div id='unord.map.cnstr-2.sentence-1' class='sentence'><i >Complexity</i>: Constant<a class='hidden_link' href='#unord.map.cnstr-2.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:unordered_map,constructor__'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:unordered_map,constructor__'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> unordered_map<span class='parenthesis'>(</span>InputIterator f, InputIterator l,
                size_type n <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>,
                <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf <span class='operator'>=</span> hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                <span class='keyword'>const</span> key_equal<span class='operator'>&amp;</span> eql <span class='operator'>=</span> key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a <span class='operator'>=</span> allocator_type<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range____________________________________________________________________'><span class='texttt'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> unordered_map<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg,
                size_type n <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>,
                <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf <span class='operator'>=</span> hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                <span class='keyword'>const</span> key_equal<span class='operator'>&amp;</span> eql <span class='operator'>=</span> key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a <span class='operator'>=</span> allocator_type<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
<span class="keyword added">constexpr</span> unordered_map<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il,
              size_type n <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>,
              <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf <span class='operator'>=</span> hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
              <span class='keyword'>const</span> key_equal<span class='operator'>&amp;</span> eql <span class='operator'>=</span> key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
              <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a <span class='operator'>=</span> allocator_type<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='unord.map.cnstr-3'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.cnstr-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12604'>#</a></div><div class='texpara'><div id='unord.map.cnstr-3.sentence-1' class='sentence'><i >Effects</i>: Constructs an empty <span class='texttt'>unordered_<span class='shy'></span>map</span> using the
specified hash function, key equality predicate, and allocator, and
using at least <span class='texttt'>n</span> buckets<a class='hidden_link' href='#unord.map.cnstr-3.sentence-1'>.</a></div> <div id='unord.map.cnstr-3.sentence-2' class='sentence'>If <span class='texttt'>n</span> is not
provided, the number of buckets is <a class='index' id=':default_number_of_buckets_in_unordered_map_'></a>implementation-defined<a class='hidden_link' href='#unord.map.cnstr-3.sentence-2'>.</a></div> <div id='unord.map.cnstr-3.sentence-3' class='sentence'>Then
inserts elements from the range [<span class='texttt'>f, l</span>), <span class='texttt'>rg</span>, or <span class='texttt'>il</span>,
respectively<a class='hidden_link' href='#unord.map.cnstr-3.sentence-3'>.</a></div> <div id='unord.map.cnstr-3.sentence-4' class='sentence'><span class='texttt'>max_<span class='shy'></span>load_<span class='shy'></span>factor<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> returns <span class='texttt'><span class='literal'>1.0</span></span><a class='hidden_link' href='#unord.map.cnstr-3.sentence-4'>.</a></div></div></div></div><div class='para' id='unord.map.cnstr-4'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.cnstr-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12615'>#</a></div><div class='texpara'><div id='unord.map.cnstr-4.sentence-1' class='sentence'><i >Complexity</i>: Average case linear, worst case quadratic<a class='hidden_link' href='#unord.map.cnstr-4.sentence-1'>.</a></div></div></div></div></div><div id='unord.map.elem' class='section'><h4 ><a class='secnum' href='#unord.map.elem' style='min-width:95pt'>24.5.4.3</a> Element access <a class='abbr_ref' href='unord.map.elem'>[unord.map.elem]</a></h4><div class='texpara'><div id=':unordered_map,element_access'><div id='lib:operator[],unordered_map'><div id='lib:unordered_map,operator[]'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:unordered_map,operator%5b%5d'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> mapped_type<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='squarebracket'>[</span><span class='squarebracket'>]</span><span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span>;
</code></div></div></div></div></div><div class='para' id='unord.map.elem-1'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.elem-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12629'>#</a></div><div class='texpara'><div id='unord.map.elem-1.sentence-1' class='sentence'><i >Effects</i>: Equivalent to: <span class='texttt'><span class='keyword'>return</span> try_<span class='shy'></span>emplace<span class='parenthesis'>(</span>k<span class='parenthesis'>)</span><span class='operator'>.</span>first<span class='operator'>-</span><span class='anglebracket'>&gt;</span>second;</span></div></div></div></div><div class='texpara'><div id=':unordered_map,element_access_'><div id='lib:operator[],unordered_map_'><div id='lib:unordered_map,operator[]_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:unordered_map,operator%5b%5d_'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> mapped_type<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='squarebracket'>[</span><span class='squarebracket'>]</span><span class='parenthesis'>(</span>key_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k<span class='parenthesis'>)</span>;
</code></div></div></div></div></div><div class='para' id='unord.map.elem-2'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.elem-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12641'>#</a></div><div class='texpara'><div id='unord.map.elem-2.sentence-1' class='sentence'><i >Effects</i>: Equivalent to: <span class='texttt'><span class='keyword'>return</span> try_<span class='shy'></span>emplace<span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>move<span class='parenthesis'>(</span>k<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='operator'>.</span>first<span class='operator'>-</span><span class='anglebracket'>&gt;</span>second;</span></div></div></div></div><div class='texpara'><div id=':unordered_map,element_access__'><div id='lib:operator[],unordered_map__'><div id='lib:unordered_map,operator[]__'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:unordered_map,operator%5b%5d__'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> mapped_type<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='squarebracket'>[</span><span class='squarebracket'>]</span><span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k<span class='parenthesis'>)</span>;
</code></div></div></div></div></div><div class='para' id='unord.map.elem-3'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.elem-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12653'>#</a></div><div class='texpara'><div id='unord.map.elem-3.sentence-1' class='sentence'><i >Constraints</i>: The <a href='expr.prim.id.qual#nt:qualified-id' title='7.5.5.3&emsp;Qualified names&emsp;[expr.prim.id.qual]'><span id='ntref:qualified-id___________'><span class='textsf'><i >qualified-id</i></span></span></a><i >s</i> <span class='texttt'>Hash<span class='operator'>&#x200b;::&#x200b;</span>is_<span class='shy'></span>transparent</span> and
<span class='texttt'>Pred<span class='operator'>&#x200b;::&#x200b;</span>is_<span class='shy'></span>transparent</span> are valid and denote types<a class='hidden_link' href='#unord.map.elem-3.sentence-1'>.</a></div></div></div></div><div class='para' id='unord.map.elem-4'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.elem-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12658'>#</a></div><div class='texpara'><div id='unord.map.elem-4.sentence-1' class='sentence'><i >Effects</i>: Equivalent to: <span class='texttt'><span class='keyword'>return</span> try_<span class='shy'></span>emplace<span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>K<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>k<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='operator'>.</span>first<span class='operator'>-</span><span class='anglebracket'>&gt;</span>second;</span></div></div></div></div><div class='texpara'><div id=':unordered_map,element_access___'><div id='lib:at,unordered_map'><div id='lib:unordered_map,at'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:unordered_map,at'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> mapped_type<span class='operator'>&amp;</span> at<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span>;
<span class="keyword added">constexpr</span> <span class='keyword'>const</span> mapped_type<span class='operator'>&amp;</span> at<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div></div><div class='para' id='unord.map.elem-5'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.elem-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12671'>#</a></div><div class='texpara'><div id='unord.map.elem-5.sentence-1' class='sentence'><i >Returns</i>: A reference to <span class='texttt'>x<span class='operator'>.</span>second</span>, where <span class='texttt'>x</span> is the (unique) element whose key is equivalent to <span class='texttt'>k</span><a class='hidden_link' href='#unord.map.elem-5.sentence-1'>.</a></div></div></div></div><div class='para' id='unord.map.elem-6'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.elem-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12675'>#</a></div><div class='texpara'><div id='unord.map.elem-6.sentence-1' class='sentence'><i >Throws</i>: An exception object of type <span class='texttt'>out_<span class='shy'></span>of_<span class='shy'></span>range</span> if no such element is present<a class='hidden_link' href='#unord.map.elem-6.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id=':unordered_map,element_access____'><div id='lib:at,unordered_map_'><div id='lib:unordered_map,at_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:unordered_map,at_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> mapped_type<span class='operator'>&amp;</span>       at<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> <span class='keyword'>const</span> mapped_type<span class='operator'>&amp;</span> at<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div></div><div class='para' id='unord.map.elem-7'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.elem-7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12688'>#</a></div><div class='texpara'><div id='unord.map.elem-7.sentence-1' class='sentence'><i >Constraints</i>: The <a href='expr.prim.id.qual#nt:qualified-id' title='7.5.5.3&emsp;Qualified names&emsp;[expr.prim.id.qual]'><span id='ntref:qualified-id____________'><span class='textsf'><i >qualified-id</i></span></span></a><i >s</i> <span class='texttt'>Hash<span class='operator'>&#x200b;::&#x200b;</span>is_<span class='shy'></span>transparent</span> and
<span class='texttt'>Pred<span class='operator'>&#x200b;::&#x200b;</span>is_<span class='shy'></span>transparent</span> are valid and denote types<a class='hidden_link' href='#unord.map.elem-7.sentence-1'>.</a></div></div></div></div><div class='para' id='unord.map.elem-8'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.elem-8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12693'>#</a></div><div class='texpara'><div id='unord.map.elem-8.sentence-1' class='sentence'><i >Preconditions</i>: The expression <span class='texttt'>find<span class='parenthesis'>(</span>k<span class='parenthesis'>)</span></span> is well-formed and has well-defined behavior<a class='hidden_link' href='#unord.map.elem-8.sentence-1'>.</a></div></div></div></div><div class='para' id='unord.map.elem-9'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.elem-9'>9</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12697'>#</a></div><div class='texpara'><div id='unord.map.elem-9.sentence-1' class='sentence'><i >Returns</i>: A reference to <span class='texttt'>find<span class='parenthesis'>(</span>k<span class='parenthesis'>)</span><span class='operator'>-</span><span class='anglebracket'>&gt;</span>second</span><a class='hidden_link' href='#unord.map.elem-9.sentence-1'>.</a></div></div></div></div><div class='para' id='unord.map.elem-10'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.elem-10'>10</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12701'>#</a></div><div class='texpara'><div id='unord.map.elem-10.sentence-1' class='sentence'><i >Throws</i>: An exception object of type <span class='texttt'>out_<span class='shy'></span>of_<span class='shy'></span>range</span>
if <span class='texttt'>find<span class='parenthesis'>(</span>k<span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> end<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#unord.map.elem-10.sentence-1'>.</a></div></div></div></div></div><div id='unord.map.modifiers' class='section'><h4 ><a class='secnum' href='#unord.map.modifiers' style='min-width:95pt'>24.5.4.4</a> Modifiers <a class='abbr_ref' href='unord.map.modifiers'>[unord.map.modifiers]</a></h4><div class='texpara'><div id='lib:insert,unordered_map'><div id='lib:unordered_map,insert_________'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:unordered_map,insert_________'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> P<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> insert<span class='parenthesis'>(</span>P<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='unord.map.modifiers-1'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.modifiers-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12717'>#</a></div><div class='texpara'><div id='unord.map.modifiers-1.sentence-1' class='sentence'><i >Constraints</i>: <span class='texttt'>is_<span class='shy'></span>constructible_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>value_<span class='shy'></span>type, P<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#unord.map.modifiers-1.sentence-1'>.</a></div></div></div></div><div class='para' id='unord.map.modifiers-2'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.modifiers-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12721'>#</a></div><div class='texpara'><div id='unord.map.modifiers-2.sentence-1' class='sentence'><i >Effects</i>: Equivalent to: <span class='texttt'><span class='keyword'>return</span> emplace<span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>P<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>obj<span class='parenthesis'>)</span><span class='parenthesis'>)</span>;</span></div></div></div></div><div class='texpara'><div id='lib:insert,unordered_map_'><div id='lib:unordered_map,insert__________'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:unordered_map,insert__________'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> P<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator hint, P<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='unord.map.modifiers-3'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.modifiers-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12733'>#</a></div><div class='texpara'><div id='unord.map.modifiers-3.sentence-1' class='sentence'><i >Constraints</i>: <span class='texttt'>is_<span class='shy'></span>constructible_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>value_<span class='shy'></span>type, P<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#unord.map.modifiers-3.sentence-1'>.</a></div></div></div></div><div class='para' id='unord.map.modifiers-4'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.modifiers-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12737'>#</a></div><div class='texpara'><div id='unord.map.modifiers-4.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='texttt'><span class='keyword'>return</span> emplace_<span class='shy'></span>hint<span class='parenthesis'>(</span>hint, std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>P<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>obj<span class='parenthesis'>)</span><span class='parenthesis'>)</span>;</span></div></div></div></div><div class='texpara'><div id='lib:unordered_map,try_emplace'><div id='lib:try_emplace,unordered_map'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:try_emplace,unordered_map'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> try_emplace<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> iterator try_emplace<span class='parenthesis'>(</span>const_iterator hint, <span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='unord.map.modifiers-5'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.modifiers-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12752'>#</a></div><div class='texpara'><div id='unord.map.modifiers-5.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>value_<span class='shy'></span>type</span> is <i >Cpp17EmplaceConstructible</i> into <span class='texttt'>unordered_<span class='shy'></span>map</span>
from <span class='texttt'>piecewise_<span class='shy'></span>con<span class='keyword'>struct</span></span>, <span class='texttt'>forward_<span class='shy'></span>as_<span class='shy'></span>tuple<span class='parenthesis'>(</span>k<span class='parenthesis'>)</span></span>,
<span class='texttt'>forward_<span class='shy'></span>as_<span class='shy'></span>tuple<span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>Args<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>args<span class='parenthesis'>)</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#unord.map.modifiers-5.sentence-1'>.</a></div></div></div></div><div class='para' id='unord.map.modifiers-6'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.modifiers-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12758'>#</a></div><div class='texpara'><div id='unord.map.modifiers-6.sentence-1' class='sentence'><i >Effects</i>: If the map already contains an element
whose key is equivalent to <span class='texttt'>k</span>,
there is no effect<a class='hidden_link' href='#unord.map.modifiers-6.sentence-1'>.</a></div> <div id='unord.map.modifiers-6.sentence-2' class='sentence'>Otherwise inserts an object of type <span class='texttt'>value_<span class='shy'></span>type</span>
constructed with <span class='texttt'>piecewise_<span class='shy'></span>construct</span>, <span class='texttt'>forward_<span class='shy'></span>as_<span class='shy'></span>tuple<span class='parenthesis'>(</span>k<span class='parenthesis'>)</span></span>,
<span class='texttt'>forward_<span class='shy'></span>as_<span class='shy'></span>tuple<span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>Args<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>args<span class='parenthesis'>)</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#unord.map.modifiers-6.sentence-2'>.</a></div></div></div></div><div class='para' id='unord.map.modifiers-7'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.modifiers-7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12767'>#</a></div><div class='texpara'><div id='unord.map.modifiers-7.sentence-1' class='sentence'><i >Returns</i>: In the first overload,
the <span class='texttt'><span class='keyword'>bool</span></span> component of the returned pair is <span class='texttt'><span class='literal'>true</span></span>
if and only if the insertion took place<a class='hidden_link' href='#unord.map.modifiers-7.sentence-1'>.</a></div> <div id='unord.map.modifiers-7.sentence-2' class='sentence'>The returned iterator points to the map element
whose key is equivalent to <span class='texttt'>k</span><a class='hidden_link' href='#unord.map.modifiers-7.sentence-2'>.</a></div></div></div></div><div class='para' id='unord.map.modifiers-8'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.modifiers-8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12775'>#</a></div><div class='texpara'><div id='unord.map.modifiers-8.sentence-1' class='sentence'><i >Complexity</i>: The same as <span class='texttt'>emplace</span> and <span class='texttt'>emplace_<span class='shy'></span>hint</span>,
respectively<a class='hidden_link' href='#unord.map.modifiers-8.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:unordered_map,try_emplace_'><div id='lib:try_emplace,unordered_map_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:try_emplace,unordered_map_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> try_emplace<span class='parenthesis'>(</span>key_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> iterator try_emplace<span class='parenthesis'>(</span>const_iterator hint, key_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='unord.map.modifiers-9'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.modifiers-9'>9</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12790'>#</a></div><div class='texpara'><div id='unord.map.modifiers-9.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>value_<span class='shy'></span>type</span> is <i >Cpp17EmplaceConstructible</i> into <span class='texttt'>unordered_<span class='shy'></span>map</span>
from <span class='texttt'>piecewise_<span class='shy'></span>con<span class='keyword'>struct</span></span>, <span class='texttt'>forward_<span class='shy'></span>as_<span class='shy'></span>tuple<span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>move<span class='parenthesis'>(</span>k<span class='parenthesis'>)</span><span class='parenthesis'>)</span></span>,
<span class='texttt'>forward_<span class='shy'></span>as_<span class='shy'></span>tuple<span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>Args<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>args<span class='parenthesis'>)</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#unord.map.modifiers-9.sentence-1'>.</a></div></div></div></div><div class='para' id='unord.map.modifiers-10'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.modifiers-10'>10</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12796'>#</a></div><div class='texpara'><div id='unord.map.modifiers-10.sentence-1' class='sentence'><i >Effects</i>: If the map already contains an element
whose key is equivalent to <span class='texttt'>k</span>,
there is no effect<a class='hidden_link' href='#unord.map.modifiers-10.sentence-1'>.</a></div> <div id='unord.map.modifiers-10.sentence-2' class='sentence'>Otherwise inserts an object of type <span class='texttt'>value_<span class='shy'></span>type</span>
constructed with <span class='texttt'>piecewise_<span class='shy'></span>construct</span>, <span class='texttt'>forward_<span class='shy'></span>as_<span class='shy'></span>tuple<span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>move<span class='parenthesis'>(</span>k<span class='parenthesis'>)</span><span class='parenthesis'>)</span></span>,
<span class='texttt'>forward_<span class='shy'></span>as_<span class='shy'></span>tuple<span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>Args<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>args<span class='parenthesis'>)</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#unord.map.modifiers-10.sentence-2'>.</a></div></div></div></div><div class='para' id='unord.map.modifiers-11'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.modifiers-11'>11</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12805'>#</a></div><div class='texpara'><div id='unord.map.modifiers-11.sentence-1' class='sentence'><i >Returns</i>: In the first overload,
the <span class='texttt'><span class='keyword'>bool</span></span> component of the returned pair is <span class='texttt'><span class='literal'>true</span></span>
if and only if the insertion took place<a class='hidden_link' href='#unord.map.modifiers-11.sentence-1'>.</a></div> <div id='unord.map.modifiers-11.sentence-2' class='sentence'>The returned iterator points to the map element
whose key is equivalent to <span class='texttt'>k</span><a class='hidden_link' href='#unord.map.modifiers-11.sentence-2'>.</a></div></div></div></div><div class='para' id='unord.map.modifiers-12'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.modifiers-12'>12</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12813'>#</a></div><div class='texpara'><div id='unord.map.modifiers-12.sentence-1' class='sentence'><i >Complexity</i>: The same as <span class='texttt'>emplace</span> and <span class='texttt'>emplace_<span class='shy'></span>hint</span>,
respectively<a class='hidden_link' href='#unord.map.modifiers-12.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:unordered_map,try_emplace__'><div id='lib:try_emplace,unordered_map__'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:try_emplace,unordered_map__'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K, <span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> try_emplace<span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K, <span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> iterator try_emplace<span class='parenthesis'>(</span>const_iterator hint, K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='unord.map.modifiers-13'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.modifiers-13'>13</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12828'>#</a></div><div class='texpara'><div id='unord.map.modifiers-13.sentence-1' class='sentence'><i >Constraints</i>: The <a href='expr.prim.id.qual#nt:qualified-id' title='7.5.5.3&emsp;Qualified names&emsp;[expr.prim.id.qual]'><span id='ntref:qualified-id_____________'><span class='textsf'><i >qualified-id</i></span></span></a><i >s</i> <span class='texttt'>Hash<span class='operator'>&#x200b;::&#x200b;</span>is_<span class='shy'></span>transparent</span> and
<span class='texttt'>Pred<span class='operator'>&#x200b;::&#x200b;</span>is_<span class='shy'></span>transparent</span> are valid and denote types<a class='hidden_link' href='#unord.map.modifiers-13.sentence-1'>.</a></div> <div id='unord.map.modifiers-13.sentence-2' class='sentence'>For the first overload,
<span class='texttt'>is_<span class='shy'></span>convertible_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, const_<span class='shy'></span>iterator<span class='anglebracket'>&gt;</span></span> and
<span class='texttt'>is_<span class='shy'></span>convertible_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, iterator<span class='anglebracket'>&gt;</span></span> are both <span class='texttt'><span class='literal'>false</span></span><a class='hidden_link' href='#unord.map.modifiers-13.sentence-2'>.</a></div></div></div></div><div class='para' id='unord.map.modifiers-14'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.modifiers-14'>14</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12836'>#</a></div><div class='texpara'><div id='unord.map.modifiers-14.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>value_<span class='shy'></span>type</span> is <i >Cpp17EmplaceConstructible</i>
into <span class='texttt'>unordered_<span class='shy'></span>map</span> from
<span class='texttt'>piecewise_<span class='shy'></span>construct, forward_<span class='shy'></span>as_<span class='shy'></span>tuple<span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>K<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>k<span class='parenthesis'>)</span><span class='parenthesis'>)</span>,
forward_<span class='shy'></span>as_<span class='shy'></span>tuple<span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>Args<span class='anglebracket'>&gt;</span><br><span class='parenthesis'>(</span>args<span class='parenthesis'>)</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#unord.map.modifiers-14.sentence-1'>.</a></div></div></div></div><div class='para' id='unord.map.modifiers-15'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.modifiers-15'>15</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12843'>#</a></div><div class='texpara'><div id='unord.map.modifiers-15.sentence-1' class='sentence'><i >Effects</i>: If the map already contains an element whose key is equivalent to <span class='texttt'>k</span>,
there is no effect<a class='hidden_link' href='#unord.map.modifiers-15.sentence-1'>.</a></div> <div id='unord.map.modifiers-15.sentence-2' class='sentence'>Otherwise, let <span class='texttt'>h</span> be <span class='texttt'>hash_<span class='shy'></span>function<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>k<span class='parenthesis'>)</span></span><a class='hidden_link' href='#unord.map.modifiers-15.sentence-2'>.</a></div> <div id='unord.map.modifiers-15.sentence-3' class='sentence'>Constructs an object <span class='texttt'>u</span> of type <span class='texttt'>value_<span class='shy'></span>type</span>
with <span class='texttt'>piecewise_<span class='shy'></span>construct, forward_<span class='shy'></span>as_<span class='shy'></span>tuple<span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>K<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>k<span class='parenthesis'>)</span><span class='parenthesis'>)</span>,
forward_<span class='shy'></span>as_<span class='shy'></span>tuple<span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>Args<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>args<span class='parenthesis'>)</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#unord.map.modifiers-15.sentence-3'>.</a></div> <div id='unord.map.modifiers-15.sentence-4' class='sentence'><br>If <span class='texttt'>hash_<span class='shy'></span>function<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>u<span class='operator'>.</span>first<span class='parenthesis'>)</span> <span class='operator'>!</span><span class='operator'>=</span> h <span class='operator'>|</span><span class='operator'>|</span> contains<span class='parenthesis'>(</span>u<span class='operator'>.</span>first<span class='parenthesis'>)</span></span> is <span class='texttt'><span class='literal'>true</span></span>,
the behavior is undefined<a class='hidden_link' href='#unord.map.modifiers-15.sentence-4'>.</a></div> <div id='unord.map.modifiers-15.sentence-5' class='sentence'>Inserts <span class='texttt'>u</span> into <span class='texttt'><span class='operator'>*</span><span class='keyword'>this</span></span><a class='hidden_link' href='#unord.map.modifiers-15.sentence-5'>.</a></div></div></div></div><div class='para' id='unord.map.modifiers-16'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.modifiers-16'>16</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12855'>#</a></div><div class='texpara'><div id='unord.map.modifiers-16.sentence-1' class='sentence'><i >Returns</i>: For the first overload,
the <span class='texttt'><span class='keyword'>bool</span></span> component of the returned pair is <span class='texttt'><span class='literal'>true</span></span>
if and only if the insertion took place<a class='hidden_link' href='#unord.map.modifiers-16.sentence-1'>.</a></div> <div id='unord.map.modifiers-16.sentence-2' class='sentence'>The returned iterator points to the map element
whose key is equivalent to <span class='texttt'>k</span><a class='hidden_link' href='#unord.map.modifiers-16.sentence-2'>.</a></div></div></div></div><div class='para' id='unord.map.modifiers-17'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.modifiers-17'>17</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12863'>#</a></div><div class='texpara'><div id='unord.map.modifiers-17.sentence-1' class='sentence'><i >Complexity</i>: The same as <span class='texttt'>emplace</span> and <span class='texttt'>emplace_<span class='shy'></span>hint</span>, respectively<a class='hidden_link' href='#unord.map.modifiers-17.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:unordered_map,insert_or_assign'><div id='lib:insert_or_assign,unordered_map'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:insert_or_assign,unordered_map'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> M<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> insert_or_assign<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k, M<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> M<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> iterator insert_or_assign<span class='parenthesis'>(</span>const_iterator hint, <span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k, M<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='unord.map.modifiers-18'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.modifiers-18'>18</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12877'>#</a></div><div class='texpara'><div id='unord.map.modifiers-18.sentence-1' class='sentence'><i >Mandates</i>: <span class='texttt'>is_<span class='shy'></span>assignable_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>mapped_<span class='shy'></span>type<span class='operator'>&amp;</span>, M<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#unord.map.modifiers-18.sentence-1'>.</a></div></div></div></div><div class='para' id='unord.map.modifiers-19'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.modifiers-19'>19</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12881'>#</a></div><div class='texpara'><div id='unord.map.modifiers-19.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>value_<span class='shy'></span>type</span> is <i >Cpp17EmplaceConstructible</i> into <span class='texttt'>unordered_<span class='shy'></span>map</span>
from <span class='texttt'>k</span>, <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>M<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>obj<span class='parenthesis'>)</span></span><a class='hidden_link' href='#unord.map.modifiers-19.sentence-1'>.</a></div></div></div></div><div class='para' id='unord.map.modifiers-20'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.modifiers-20'>20</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12886'>#</a></div><div class='texpara'><div id='unord.map.modifiers-20.sentence-1' class='sentence'><i >Effects</i>: If the map already contains an element <span class='texttt'>e</span>
whose key is equivalent to <span class='texttt'>k</span>,
assigns <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>M<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>obj<span class='parenthesis'>)</span></span> to <span class='texttt'>e<span class='operator'>.</span>second</span><a class='hidden_link' href='#unord.map.modifiers-20.sentence-1'>.</a></div> <div id='unord.map.modifiers-20.sentence-2' class='sentence'>Otherwise inserts an object of type <span class='texttt'>value_<span class='shy'></span>type</span>
constructed with <span class='texttt'>k</span>, <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>M<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>obj<span class='parenthesis'>)</span></span><a class='hidden_link' href='#unord.map.modifiers-20.sentence-2'>.</a></div></div></div></div><div class='para' id='unord.map.modifiers-21'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.modifiers-21'>21</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12894'>#</a></div><div class='texpara'><div id='unord.map.modifiers-21.sentence-1' class='sentence'><i >Returns</i>: In the first overload,
the <span class='texttt'><span class='keyword'>bool</span></span> component of the returned pair is <span class='texttt'><span class='literal'>true</span></span>
if and only if the insertion took place<a class='hidden_link' href='#unord.map.modifiers-21.sentence-1'>.</a></div> <div id='unord.map.modifiers-21.sentence-2' class='sentence'>The returned iterator points to the map element
whose key is equivalent to <span class='texttt'>k</span><a class='hidden_link' href='#unord.map.modifiers-21.sentence-2'>.</a></div></div></div></div><div class='para' id='unord.map.modifiers-22'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.modifiers-22'>22</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12902'>#</a></div><div class='texpara'><div id='unord.map.modifiers-22.sentence-1' class='sentence'><i >Complexity</i>: The same as <span class='texttt'>emplace</span> and <span class='texttt'>emplace_<span class='shy'></span>hint</span>,
respectively<a class='hidden_link' href='#unord.map.modifiers-22.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:unordered_map,insert_or_assign_'><div id='lib:insert_or_assign,unordered_map_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:insert_or_assign,unordered_map_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> M<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> insert_or_assign<span class='parenthesis'>(</span>key_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, M<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> M<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> iterator insert_or_assign<span class='parenthesis'>(</span>const_iterator hint, key_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, M<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='unord.map.modifiers-23'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.modifiers-23'>23</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12917'>#</a></div><div class='texpara'><div id='unord.map.modifiers-23.sentence-1' class='sentence'><i >Mandates</i>: <span class='texttt'>is_<span class='shy'></span>assignable_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>mapped_<span class='shy'></span>type<span class='operator'>&amp;</span>, M<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#unord.map.modifiers-23.sentence-1'>.</a></div></div></div></div><div class='para' id='unord.map.modifiers-24'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.modifiers-24'>24</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12921'>#</a></div><div class='texpara'><div id='unord.map.modifiers-24.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>value_<span class='shy'></span>type</span> is <i >Cpp17EmplaceConstructible</i> into <span class='texttt'>unordered_<span class='shy'></span>map</span>
from <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>move<span class='parenthesis'>(</span>k<span class='parenthesis'>)</span></span>, <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>&#x200b;forward<span class='anglebracket'>&lt;</span>M<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>obj<span class='parenthesis'>)</span></span><a class='hidden_link' href='#unord.map.modifiers-24.sentence-1'>.</a></div></div></div></div><div class='para' id='unord.map.modifiers-25'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.modifiers-25'>25</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12926'>#</a></div><div class='texpara'><div id='unord.map.modifiers-25.sentence-1' class='sentence'><i >Effects</i>: If the map already contains an element <span class='texttt'>e</span>
whose key is equivalent to <span class='texttt'>k</span>,
assigns <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>M<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>obj<span class='parenthesis'>)</span></span> to <span class='texttt'>e<span class='operator'>.</span>second</span><a class='hidden_link' href='#unord.map.modifiers-25.sentence-1'>.</a></div> <div id='unord.map.modifiers-25.sentence-2' class='sentence'>Otherwise inserts an object of type <span class='texttt'>value_<span class='shy'></span>type</span>
constructed with <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>&#x200b;move<span class='parenthesis'>(</span>k<span class='parenthesis'>)</span></span>, <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>M<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>obj<span class='parenthesis'>)</span></span><a class='hidden_link' href='#unord.map.modifiers-25.sentence-2'>.</a></div></div></div></div><div class='para' id='unord.map.modifiers-26'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.modifiers-26'>26</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12934'>#</a></div><div class='texpara'><div id='unord.map.modifiers-26.sentence-1' class='sentence'><i >Returns</i>: In the first overload,
the <span class='texttt'><span class='keyword'>bool</span></span> component of the returned pair is <span class='texttt'><span class='literal'>true</span></span>
if and only if the insertion took place<a class='hidden_link' href='#unord.map.modifiers-26.sentence-1'>.</a></div> <div id='unord.map.modifiers-26.sentence-2' class='sentence'>The returned iterator points to the map element
whose key is equivalent to <span class='texttt'>k</span><a class='hidden_link' href='#unord.map.modifiers-26.sentence-2'>.</a></div></div></div></div><div class='para' id='unord.map.modifiers-27'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.modifiers-27'>27</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12942'>#</a></div><div class='texpara'><div id='unord.map.modifiers-27.sentence-1' class='sentence'><i >Complexity</i>: The same as <span class='texttt'>emplace</span> and <span class='texttt'>emplace_<span class='shy'></span>hint</span>,
respectively<a class='hidden_link' href='#unord.map.modifiers-27.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:unordered_map,insert_or_assign__'><div id='lib:insert_or_assign,unordered_map__'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:insert_or_assign,unordered_map__'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K, <span class='keyword'>class</span> M<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> insert_or_assign<span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, M<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K, <span class='keyword'>class</span> M<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> iterator insert_or_assign<span class='parenthesis'>(</span>const_iterator hint, K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, M<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='unord.map.modifiers-28'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.modifiers-28'>28</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12957'>#</a></div><div class='texpara'><div id='unord.map.modifiers-28.sentence-1' class='sentence'><i >Constraints</i>: The <a href='expr.prim.id.qual#nt:qualified-id' title='7.5.5.3&emsp;Qualified names&emsp;[expr.prim.id.qual]'><span id='ntref:qualified-id______________'><span class='textsf'><i >qualified-id</i></span></span></a><i >s</i> <span class='texttt'>Hash<span class='operator'>&#x200b;::&#x200b;</span>is_<span class='shy'></span>transparent</span> and
<span class='texttt'>Pred<span class='operator'>&#x200b;::&#x200b;</span>is_<span class='shy'></span>transparent</span> are valid and denote types<a class='hidden_link' href='#unord.map.modifiers-28.sentence-1'>.</a></div></div></div></div><div class='para' id='unord.map.modifiers-29'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.modifiers-29'>29</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12962'>#</a></div><div class='texpara'><div id='unord.map.modifiers-29.sentence-1' class='sentence'><i >Mandates</i>: <span class='texttt'>is_<span class='shy'></span>assignable_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>mapped_<span class='shy'></span>type<span class='operator'>&amp;</span>, M<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#unord.map.modifiers-29.sentence-1'>.</a></div></div></div></div><div class='para' id='unord.map.modifiers-30'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.modifiers-30'>30</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12966'>#</a></div><div class='texpara'><div id='unord.map.modifiers-30.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>value_<span class='shy'></span>type</span> is <i >Cpp17EmplaceConstructible</i>
into <span class='texttt'>unordered_<span class='shy'></span>map</span>
from <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>K<span class='anglebracket'>&gt;</span><br><span class='parenthesis'>(</span>k<span class='parenthesis'>)</span>, std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>M<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>obj<span class='parenthesis'>)</span></span><a class='hidden_link' href='#unord.map.modifiers-30.sentence-1'>.</a></div></div></div></div><div class='para' id='unord.map.modifiers-31'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.modifiers-31'>31</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12972'>#</a></div><div class='texpara'><div id='unord.map.modifiers-31.sentence-1' class='sentence'><i >Effects</i>: If the map already contains an element <span class='texttt'>e</span>
whose key is equivalent to <span class='texttt'>k</span>,
assigns <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>M<span class='anglebracket'>&gt;</span><br><span class='parenthesis'>(</span>obj<span class='parenthesis'>)</span></span> to <span class='texttt'>e<span class='operator'>.</span>second</span><a class='hidden_link' href='#unord.map.modifiers-31.sentence-1'>.</a></div> <div id='unord.map.modifiers-31.sentence-2' class='sentence'>Otherwise, let <span class='texttt'>h</span> be <span class='texttt'>hash_<span class='shy'></span>function<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>k<span class='parenthesis'>)</span></span><a class='hidden_link' href='#unord.map.modifiers-31.sentence-2'>.</a></div> <div id='unord.map.modifiers-31.sentence-3' class='sentence'>Constructs an object <span class='texttt'>u</span> of type <span class='texttt'>value_<span class='shy'></span>type</span>
with <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>K<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>k<span class='parenthesis'>)</span>, std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>M<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>obj<span class='parenthesis'>)</span></span><a class='hidden_link' href='#unord.map.modifiers-31.sentence-3'>.</a></div> <div id='unord.map.modifiers-31.sentence-4' class='sentence'>If <span class='texttt'>hash_<span class='shy'></span>function<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>u<span class='operator'>.</span>first<span class='parenthesis'>)</span> <span class='operator'>!</span><span class='operator'>=</span> h <span class='operator'>|</span><span class='operator'>|</span> contains<span class='parenthesis'>(</span>u<span class='operator'>.</span>first<span class='parenthesis'>)</span></span> is <span class='texttt'><span class='literal'>true</span></span>,
the behavior is undefined<a class='hidden_link' href='#unord.map.modifiers-31.sentence-4'>.</a></div> <div id='unord.map.modifiers-31.sentence-5' class='sentence'>Inserts <span class='texttt'>u</span> into <span class='texttt'><span class='operator'>*</span><span class='keyword'>this</span></span><a class='hidden_link' href='#unord.map.modifiers-31.sentence-5'>.</a></div></div></div></div><div class='para' id='unord.map.modifiers-32'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.modifiers-32'>32</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12984'>#</a></div><div class='texpara'><div id='unord.map.modifiers-32.sentence-1' class='sentence'><i >Returns</i>: For the first overload,
the <span class='texttt'><span class='keyword'>bool</span></span> component of the returned pair is <span class='texttt'><span class='literal'>true</span></span>
if and only if the insertion took place<a class='hidden_link' href='#unord.map.modifiers-32.sentence-1'>.</a></div> <div id='unord.map.modifiers-32.sentence-2' class='sentence'>The returned iterator points to the map element
whose key is equivalent to <span class='texttt'>k</span><a class='hidden_link' href='#unord.map.modifiers-32.sentence-2'>.</a></div></div></div></div><div class='para' id='unord.map.modifiers-33'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.modifiers-33'>33</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L12992'>#</a></div><div class='texpara'><div id='unord.map.modifiers-33.sentence-1' class='sentence'><i >Complexity</i>: The same as <span class='texttt'>emplace</span> and <span class='texttt'>emplace_<span class='shy'></span>hint</span>, respectively<a class='hidden_link' href='#unord.map.modifiers-33.sentence-1'>.</a></div></div></div></div></div><div id='unord.map.erasure' class='section'><h4 ><a class='secnum' href='#unord.map.erasure' style='min-width:95pt'>24.5.4.5</a> Erasure <a class='abbr_ref' href='unord.map.erasure'>[unord.map.erasure]</a></h4><div class='texpara'><div id='lib:unordered_map,erase_if'><div id='lib:erase_if,unordered_map'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:erase_if,unordered_map'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K, <span class='keyword'>class</span> T, <span class='keyword'>class</span> H, <span class='keyword'>class</span> P, <span class='keyword'>class</span> A, <span class='keyword'>class</span> Predicate<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>typename</span> unordered_map<span class='anglebracket'>&lt;</span>K, T, H, P, A<span class='anglebracket'>&gt;</span><span class='operator'>::</span>size_type
    erase_if<span class='parenthesis'>(</span>unordered_map<span class='anglebracket'>&lt;</span>K, T, H, P, A<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> c, Predicate pred<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='unord.map.erasure-1'><div class='marginalizedparent'><a class='marginalized' href='#unord.map.erasure-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L13007'>#</a></div><div class='texpara'><div id='unord.map.erasure-1.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>auto</span> original_size <span class='operator'>=</span> c<span class='operator'>.</span>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
<span class='keyword'>for</span> <span class='parenthesis'>(</span><span class='keyword'>auto</span> i <span class='operator'>=</span> c<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, last <span class='operator'>=</span> c<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>; i <span class='operator'>!</span><span class='operator'>=</span> last; <span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
  <span class='keyword'>if</span> <span class='parenthesis'>(</span>pred<span class='parenthesis'>(</span><span class='operator'>*</span>i<span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
    i <span class='operator'>=</span> c<span class='operator'>.</span>erase<span class='parenthesis'>(</span>i<span class='parenthesis'>)</span>;
  <span class='curlybracket'>}</span> <span class='keyword'>else</span> <span class='curlybracket'>{</span>
    <span class='operator'>+</span><span class='operator'>+</span>i;
  <span class='curlybracket'>}</span>
<span class='curlybracket'>}</span>
<span class='keyword'>return</span> original_size <span class='operator'>-</span> c<span class='operator'>.</span>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
</span></div></div></div></div></div></div><div id='unord.multimap' class='section'><h3 ><a class='secnum' href='#unord.multimap' style='min-width:80pt'>24.5.5</a> Class template <span class='texttt'>unordered_<span class='shy'></span>multimap</span> <a class='abbr_ref' href='unord.multimap'>[unord.multimap]</a></h3><div class='texpara'><a class='index' id='lib:unordered_multimap_'></a></div><div id='unord.multimap.overview' class='section'><h4 ><a class='secnum' href='#unord.multimap.overview' style='min-width:95pt'>24.5.5.1</a> Overview <a class='abbr_ref' href='unord.multimap.overview'>[unord.multimap.overview]</a></h4><div class='para' id='unord.multimap.overview-1'><div class='marginalizedparent'><a class='marginalized' href='#unord.multimap.overview-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L13028'>#</a></div><div class='texpara'><div id='unord.multimap.overview-1.sentence-1' class='sentence'><a class='index' id=':unordered_multimap,equivalent_keys'></a><a class='index' id=':unordered_associative_containers,equivalent_keys__'></a>An <span class='texttt'>unordered_<span class='shy'></span>multimap</span> is an unordered associative container
that supports equivalent keys (an instance of <span class='texttt'>unordered_<span class='shy'></span>multimap</span> may contain
multiple copies of each key value) and that associates values of
another type <span class='texttt'>mapped_<span class='shy'></span>type</span> with the keys<a class='hidden_link' href='#unord.multimap.overview-1.sentence-1'>.</a></div> <div id='unord.multimap.overview-1.sentence-2' class='sentence'>The <span class='texttt'>unordered_<span class='shy'></span>multimap</span> class
supports forward iterators<a class='hidden_link' href='#unord.multimap.overview-1.sentence-2'>.</a></div></div></div><div class='para' id='unord.multimap.overview-2'><div class='marginalizedparent'><a class='marginalized' href='#unord.multimap.overview-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L13038'>#</a></div><div class='texpara'><div id='unord.multimap.overview-2.sentence-1' class='sentence'>An <span class='texttt'>unordered_<span class='shy'></span>multimap</span> meets all of the requirements
of a container (<a href='#container.reqmts' title='24.2.2.2&emsp;Container requirements'>[container.<span class='shy'></span>reqmts]</a>),
of an allocator-aware container (<a href='#container.alloc.reqmts' title='24.2.2.5&emsp;Allocator-aware containers'>[container.<span class='shy'></span>alloc.<span class='shy'></span>reqmts]</a>), and
of an unordered associative container (<a href='#unord.req' title='24.2.8&emsp;Unordered associative containers'>[unord.<span class='shy'></span>req]</a>)<a class='hidden_link' href='#unord.multimap.overview-2.sentence-1'>.</a></div> <div id='unord.multimap.overview-2.sentence-2' class='sentence'>It provides the operations described in the
preceding requirements table for equivalent keys; that is, an <span class='texttt'>unordered_<span class='shy'></span>multimap</span>
supports the <span class='texttt'>a_<span class='shy'></span>eq</span> operations in that table, not the <span class='texttt'>a_<span class='shy'></span>uniq</span> operations<a class='hidden_link' href='#unord.multimap.overview-2.sentence-2'>.</a></div> <div id='unord.multimap.overview-2.sentence-3' class='sentence'>For an <span class='texttt'>unordered_<span class='shy'></span>multimap<span class='anglebracket'>&lt;</span>Key, T<span class='anglebracket'>&gt;</span></span> the <span class='texttt'>key_<span class='shy'></span>type</span> is <span class='texttt'>Key</span>,
the <span class='texttt'>mapped_<span class='shy'></span>type</span> is <span class='texttt'>T</span>,
and the <span class='texttt'>value_<span class='shy'></span>type</span> is <span class='texttt'>pair<span class='anglebracket'>&lt;</span><span class='keyword'>const</span> Key, T<span class='anglebracket'>&gt;</span></span><a class='hidden_link' href='#unord.multimap.overview-2.sentence-3'>.</a></div></div></div><div class='para' id='unord.multimap.overview-3'><div class='marginalizedparent'><a class='marginalized' href='#unord.multimap.overview-3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L13050'>#</a></div><div class='texpara'><div id='unord.multimap.overview-3.sentence-1' class='sentence'>Subclause <a href='#unord.multimap' title='24.5.5&emsp;Class template unordered_&shy;multimap'>[unord.<span class='shy'></span>multimap]</a> only describes operations on <span class='texttt'>unordered_<span class='shy'></span>multimap</span>
that are not described in one of the requirement tables, or for which
there is additional semantic information<a class='hidden_link' href='#unord.multimap.overview-3.sentence-1'>.</a></div></div>

<div class='para added' id='unordered_multimap.overview-4'><div class='marginalizedparent'><a class='marginalized' href='#unordered_multimap.overview-4'>4</a></div><div class='sourceLinkParent'><a class='sourceLink' href=''>#</a></div>
<div class='texpara'>The types <span class="texttt">iterator</span> and <span class="texttt">const_iterator</span> meet the constexpr iterator requirements (<a href="iterator.requirements.general" title="25.3.1 General">[iterator.<span class="shy"></span>requirements.<span class="shy"></span>general]</a>).</div></div>

<div class='texpara'><span id='lib:unordered_multimap__'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:unordered_multimap__'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key,
           <span class='keyword'>class</span> T,
           <span class='keyword'>class</span> Hash <span class='operator'>=</span> hash<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Pred <span class='operator'>=</span> equal_to<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span>pair<span class='anglebracket'>&lt;</span><span class='keyword'>const</span> Key, T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> unordered_multimap <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> key_type             <span class='operator'>=</span> Key;
    <span class='keyword'>using</span> mapped_type          <span class='operator'>=</span> T;
    <span class='keyword'>using</span> value_type           <span class='operator'>=</span> pair<span class='anglebracket'>&lt;</span><span class='keyword'>const</span> Key, T<span class='anglebracket'>&gt;</span>;
    <span class='keyword'>using</span> hasher               <span class='operator'>=</span> Hash;
    <span class='keyword'>using</span> key_equal            <span class='operator'>=</span> Pred;
    <span class='keyword'>using</span> allocator_type       <span class='operator'>=</span> Allocator;
    <span class='keyword'>using</span> pointer              <span class='operator'>=</span> <span class='keyword'>typename</span> allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>pointer;
    <span class='keyword'>using</span> const_pointer        <span class='operator'>=</span> <span class='keyword'>typename</span> allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>const_pointer;
    <span class='keyword'>using</span> reference            <span class='operator'>=</span> value_type<span class='operator'>&amp;</span>;
    <span class='keyword'>using</span> const_reference      <span class='operator'>=</span> <span class='keyword'>const</span> value_type<span class='operator'>&amp;</span>;
    <span class='keyword'>using</span> size_type            <span class='operator'>=</span> <a class='index' id=':type_of_unordered_multimap::size_type'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> difference_type      <span class='operator'>=</span> <a class='index' id=':type_of_unordered_multimap::difference_type'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>

    <span class='keyword'>using</span> iterator             <span class='operator'>=</span> <a class='index' id=':type_of_unordered_multimap::iterator'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> const_iterator       <span class='operator'>=</span> <a class='index' id=':type_of_unordered_multimap::const_iterator'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> local_iterator       <span class='operator'>=</span> <a class='index' id=':type_of_unordered_multimap::local_iterator'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> const_local_iterator <span class='operator'>=</span> <a class='index' id=':type_of_unordered_multimap::const_local_iterator'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> node_type            <span class='operator'>=</span> <i ><span class='texttt'>unspecified</span></i>;

    <span class='comment'>// <a href='#unord.multimap.cnstr' title='24.5.5.2&emsp;Constructors'>[unord.<span class='shy'></span>multimap.<span class='shy'></span>cnstr]</a>, construct/copy/destroy</span>
    <span class="keyword added">constexpr</span> unordered_multimap<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> unordered_multimap<span class='parenthesis'>(</span>size_type n,
                                <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf <span class='operator'>=</span> hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                                <span class='keyword'>const</span> key_equal<span class='operator'>&amp;</span> eql <span class='operator'>=</span> key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                                <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a <span class='operator'>=</span> allocator_type<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> unordered_multimap<span class='parenthesis'>(</span>InputIterator f, InputIterator l,
                         size_type n <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>,
                         <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf <span class='operator'>=</span> hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                         <span class='keyword'>const</span> key_equal<span class='operator'>&amp;</span> eql <span class='operator'>=</span> key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                         <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a <span class='operator'>=</span> allocator_type<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range_____________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> unordered_multimap<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg,
                         size_type n <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>,
                         <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf <span class='operator'>=</span> hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                         <span class='keyword'>const</span> key_equal<span class='operator'>&amp;</span> eql <span class='operator'>=</span> key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                         <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a <span class='operator'>=</span> allocator_type<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> unordered_multimap<span class='parenthesis'>(</span><span class='keyword'>const</span> unordered_multimap<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> unordered_multimap<span class='parenthesis'>(</span>unordered_multimap<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> unordered_multimap<span class='parenthesis'>(</span><span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> unordered_multimap<span class='parenthesis'>(</span><span class='keyword'>const</span> unordered_multimap<span class='operator'>&amp;</span>, <span class='keyword'>const</span> type_identity_t<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> unordered_multimap<span class='parenthesis'>(</span>unordered_multimap<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, <span class='keyword'>const</span> type_identity_t<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> unordered_multimap<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il,
                       size_type n <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>,
                       <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf <span class='operator'>=</span> hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                       <span class='keyword'>const</span> key_equal<span class='operator'>&amp;</span> eql <span class='operator'>=</span> key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                       <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a <span class='operator'>=</span> allocator_type<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> unordered_multimap<span class='parenthesis'>(</span>size_type n, <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>
      <span class='operator'>:</span> unordered_multimap<span class='parenthesis'>(</span>n, hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> unordered_multimap<span class='parenthesis'>(</span>size_type n, <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf, <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>
      <span class='operator'>:</span> unordered_multimap<span class='parenthesis'>(</span>n, hf, key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> unordered_multimap<span class='parenthesis'>(</span>InputIterator f, InputIterator l, size_type n, <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>
        <span class='operator'>:</span> unordered_multimap<span class='parenthesis'>(</span>f, l, n, hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> unordered_multimap<span class='parenthesis'>(</span>InputIterator f, InputIterator l, size_type n, <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf,
                         <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>
        <span class='operator'>:</span> unordered_multimap<span class='parenthesis'>(</span>f, l, n, hf, key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range______________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr</span> unordered_multimap<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, size_type n, <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>
      <span class='operator'>:</span> unordered_multimap<span class='parenthesis'>(</span>from_range, std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>rg<span class='parenthesis'>)</span>,
                           n, hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range_______________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr</span> unordered_multimap<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, size_type n, <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf,
                       <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>
      <span class='operator'>:</span> unordered_multimap<span class='parenthesis'>(</span>from_range, std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>rg<span class='parenthesis'>)</span>, n, hf, key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> unordered_multimap<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il, size_type n, <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>
      <span class='operator'>:</span> unordered_multimap<span class='parenthesis'>(</span>il, n, hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> unordered_multimap<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il, size_type n, <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf,
                       <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>
      <span class='operator'>:</span> unordered_multimap<span class='parenthesis'>(</span>il, n, hf, key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> <span class='operator'>~</span>unordered_multimap<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> unordered_multimap<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> unordered_multimap<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> unordered_multimap<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span>unordered_multimap<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span>
      <span class='keyword'>noexcept</span><span class='parenthesis'>(</span>allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>is_always_equal<span class='operator'>::</span>value <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
               is_nothrow_move_assignable_v<span class='anglebracket'>&lt;</span>Hash<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
               is_nothrow_move_assignable_v<span class='anglebracket'>&lt;</span>Pred<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> unordered_multimap<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> allocator_type get_allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// iterators</span>
    <span class="keyword added">constexpr</span> iterator       begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> iterator       end<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator end<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator cbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator cend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// capacity</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> size_type size<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> size_type max_size<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// <a href='#unord.multimap.modifiers' title='24.5.5.3&emsp;Modifiers'>[unord.<span class='shy'></span>multimap.<span class='shy'></span>modifiers]</a>, modifiers</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator emplace<span class='parenthesis'>(</span>Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator emplace_hint<span class='parenthesis'>(</span>const_iterator position, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span><span class='keyword'>const</span> value_type<span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>value_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> P<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>P<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator hint, <span class='keyword'>const</span> value_type<span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator hint, value_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> P<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator hint, P<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert<span class='parenthesis'>(</span>InputIterator first, InputIterator last<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range________________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert_range<span class='parenthesis'>(</span>R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> node_type extract<span class='parenthesis'>(</span>const_iterator position<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> node_type extract<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> node_type extract<span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>node_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> nh<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator hint, node_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> nh<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> iterator  erase<span class='parenthesis'>(</span>iterator position<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator  erase<span class='parenthesis'>(</span>const_iterator position<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> size_type erase<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> size_type erase<span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator  erase<span class='parenthesis'>(</span>const_iterator first, const_iterator last<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span>      swap<span class='parenthesis'>(</span>unordered_multimap<span class='operator'>&amp;</span><span class='parenthesis'>)</span>
      <span class='keyword'>noexcept</span><span class='parenthesis'>(</span>allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>is_always_equal<span class='operator'>::</span>value <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
               is_nothrow_swappable_v<span class='anglebracket'>&lt;</span>Hash<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
               is_nothrow_swappable_v<span class='anglebracket'>&lt;</span>Pred<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span>      clear<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;

    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> H2, <span class='keyword'>class</span> P2<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>unordered_multimap<span class='anglebracket'>&lt;</span>Key, T, H2, P2, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> source<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> H2, <span class='keyword'>class</span> P2<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>unordered_multimap<span class='anglebracket'>&lt;</span>Key, T, H2, P2, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span><span class='operator'>&amp;</span> source<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> H2, <span class='keyword'>class</span> P2<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>unordered_map<span class='anglebracket'>&lt;</span>Key, T, H2, P2, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> source<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> H2, <span class='keyword'>class</span> P2<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>unordered_map<span class='anglebracket'>&lt;</span>Key, T, H2, P2, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span><span class='operator'>&amp;</span> source<span class='parenthesis'>)</span>;

    <span class='comment'>// observers</span>
    <span class="keyword added">constexpr</span> hasher hash_function<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> key_equal key_eq<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// map operations</span>
    <span class="keyword added">constexpr</span> iterator         find<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> const_iterator   find<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> iterator       find<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> const_iterator find<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> size_type        count<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> size_type      count<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>bool</span>             contains<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>bool</span>           contains<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, iterator<span class='anglebracket'>&gt;</span>               equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>const_iterator, const_iterator<span class='anglebracket'>&gt;</span>   equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, iterator<span class='anglebracket'>&gt;</span>             equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>const_iterator, const_iterator<span class='anglebracket'>&gt;</span> equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// bucket interface</span>
    <span class="keyword added">constexpr</span> size_type bucket_count<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> size_type max_bucket_count<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> size_type bucket_size<span class='parenthesis'>(</span>size_type n<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> size_type bucket<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> size_type bucket<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> local_iterator begin<span class='parenthesis'>(</span>size_type n<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> const_local_iterator begin<span class='parenthesis'>(</span>size_type n<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> local_iterator end<span class='parenthesis'>(</span>size_type n<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> const_local_iterator end<span class='parenthesis'>(</span>size_type n<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> const_local_iterator cbegin<span class='parenthesis'>(</span>size_type n<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> const_local_iterator cend<span class='parenthesis'>(</span>size_type n<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// hash policy</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>float</span> load_factor<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>float</span> max_load_factor<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> max_load_factor<span class='parenthesis'>(</span><span class='keyword'>float</span> z<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> rehash<span class='parenthesis'>(</span>size_type n<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> reserve<span class='parenthesis'>(</span>size_type n<span class='parenthesis'>)</span>;
  <span class='curlybracket'>}</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator,
           <span class='keyword'>class</span> Hash <span class='operator'>=</span> hash<span class='anglebracket'>&lt;</span><i >iter-key-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Pred <span class='operator'>=</span> equal_to<span class='anglebracket'>&lt;</span><i >iter-key-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span><i >iter-to-alloc-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    unordered_multimap<span class='parenthesis'>(</span>InputIterator, InputIterator,
                       <span class='keyword'>typename</span> <i ><span class='texttt'>see below</span></i><span class='operator'>::</span>size_type <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>,
                       Hash <span class='operator'>=</span> Hash<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, Pred <span class='operator'>=</span> Pred<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, Allocator <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_multimap<span class='anglebracket'>&lt;</span><i >iter-key-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>, <i >iter-mapped-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>,
                            Hash, Pred, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range____________________'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R,
           <span class='keyword'>class</span> Hash <span class='operator'>=</span> hash<span class='anglebracket'>&lt;</span><i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Pred <span class='operator'>=</span> equal_to<span class='anglebracket'>&lt;</span><i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span><i >range-to-alloc-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    unordered_multimap<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, <span class='keyword'>typename</span> <i ><span class='texttt'>see below</span></i><span class='operator'>::</span>size_type <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>,
                       Hash <span class='operator'>=</span> Hash<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, Pred <span class='operator'>=</span> Pred<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, Allocator <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_multimap<span class='anglebracket'>&lt;</span><i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, <i >range-mapped-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, Hash, Pred, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Hash <span class='operator'>=</span> hash<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Pred <span class='operator'>=</span> equal_to<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>, <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span>pair<span class='anglebracket'>&lt;</span><span class='keyword'>const</span> Key, T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    unordered_multimap<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>pair<span class='anglebracket'>&lt;</span>Key, T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
                       <span class='keyword'>typename</span> <i ><span class='texttt'>see below</span></i><span class='operator'>::</span>size_type <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>,
                       Hash <span class='operator'>=</span> Hash<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, Pred <span class='operator'>=</span> Pred<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, Allocator <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_multimap<span class='anglebracket'>&lt;</span>Key, T, Hash, Pred, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    unordered_multimap<span class='parenthesis'>(</span>InputIterator, InputIterator, <span class='keyword'>typename</span> <i ><span class='texttt'>see below</span></i><span class='operator'>::</span>size_type, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_multimap<span class='anglebracket'>&lt;</span><i >iter-key-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>, <i >iter-mapped-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>,
                            hash<span class='anglebracket'>&lt;</span><i >iter-key-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
                            equal_to<span class='anglebracket'>&lt;</span><i >iter-key-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    unordered_multimap<span class='parenthesis'>(</span>InputIterator, InputIterator, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_multimap<span class='anglebracket'>&lt;</span><i >iter-key-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>, <i >iter-mapped-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>,
                            hash<span class='anglebracket'>&lt;</span><i >iter-key-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
                            equal_to<span class='anglebracket'>&lt;</span><i >iter-key-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Hash, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    unordered_multimap<span class='parenthesis'>(</span>InputIterator, InputIterator, <span class='keyword'>typename</span> <i ><span class='texttt'>see below</span></i><span class='operator'>::</span>size_type, Hash,
                       Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_multimap<span class='anglebracket'>&lt;</span><i >iter-key-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>, <i >iter-mapped-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>, Hash,
                            equal_to<span class='anglebracket'>&lt;</span><i >iter-key-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range_____________________'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    unordered_multimap<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, <span class='keyword'>typename</span> <i ><span class='texttt'>see below</span></i><span class='operator'>::</span>size_type, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_multimap<span class='anglebracket'>&lt;</span><i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, <i >range-mapped-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, hash<span class='anglebracket'>&lt;</span><i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
                            equal_to<span class='anglebracket'>&lt;</span><i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range______________________'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    unordered_multimap<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_multimap<span class='anglebracket'>&lt;</span><i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, <i >range-mapped-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, hash<span class='anglebracket'>&lt;</span><i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
                            equal_to<span class='anglebracket'>&lt;</span><i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range_______________________'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R, <span class='keyword'>class</span> Hash, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    unordered_multimap<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, <span class='keyword'>typename</span> <i ><span class='texttt'>see below</span></i><span class='operator'>::</span>size_type, Hash, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_multimap<span class='anglebracket'>&lt;</span><i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, <i >range-mapped-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, Hash,
                            equal_to<span class='anglebracket'>&lt;</span><i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    unordered_multimap<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>pair<span class='anglebracket'>&lt;</span>Key, T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>, <span class='keyword'>typename</span> <i ><span class='texttt'>see below</span></i><span class='operator'>::</span>size_type,
                       Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_multimap<span class='anglebracket'>&lt;</span>Key, T, hash<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>, equal_to<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    unordered_multimap<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>pair<span class='anglebracket'>&lt;</span>Key, T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_multimap<span class='anglebracket'>&lt;</span>Key, T, hash<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>, equal_to<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Hash, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    unordered_multimap<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>pair<span class='anglebracket'>&lt;</span>Key, T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>, <span class='keyword'>typename</span> <i ><span class='texttt'>see below</span></i><span class='operator'>::</span>size_type,
                       Hash, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_multimap<span class='anglebracket'>&lt;</span>Key, T, Hash, equal_to<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>}</span>
</span></span></div></div><div class='para' id='unord.multimap.overview-4'><div class='marginalizedparent'><a class='marginalized' href='#unord.multimap.overview-4'>4</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L13318'>#</a></div><div class='texpara'><div id='unord.multimap.overview-4.sentence-1' class='sentence'>A <span class='texttt'>size_<span class='shy'></span>type</span> parameter type in an <span class='texttt'>unordered_<span class='shy'></span>multimap</span> deduction guide
refers to the <span class='texttt'>size_<span class='shy'></span>type</span> member type of the type deduced by the deduction guide<a class='hidden_link' href='#unord.multimap.overview-4.sentence-1'>.</a></div></div></div></div><div id='unord.multimap.cnstr' class='section'><h4 ><a class='secnum' href='#unord.multimap.cnstr' style='min-width:95pt'>24.5.5.2</a> Constructors <a class='abbr_ref' href='unord.multimap.cnstr'>[unord.multimap.cnstr]</a></h4><div class='texpara'><div id='lib:unordered_multimap,constructor_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:unordered_multimap,constructor_'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> unordered_multimap<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>:</span> unordered_multimap<span class='parenthesis'>(</span>size_type<span class='parenthesis'>(</span><i ><span class='texttt'>see below</span></i><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
<span class='keyword'><span class="keyword added">constexpr</span> explicit</span> unordered_multimap<span class='parenthesis'>(</span>size_type n,
                            <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf <span class='operator'>=</span> hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                            <span class='keyword'>const</span> key_equal<span class='operator'>&amp;</span> eql <span class='operator'>=</span> key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                            <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a <span class='operator'>=</span> allocator_type<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='unord.multimap.cnstr-1'><div class='marginalizedparent'><a class='marginalized' href='#unord.multimap.cnstr-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L13334'>#</a></div><div class='texpara'><div id='unord.multimap.cnstr-1.sentence-1' class='sentence'><i >Effects</i>: Constructs an empty <span class='texttt'>unordered_<span class='shy'></span>multimap</span> using the
specified hash function, key equality predicate, and allocator, and
using at least <span class='texttt'>n</span> buckets<a class='hidden_link' href='#unord.multimap.cnstr-1.sentence-1'>.</a></div> <div id='unord.multimap.cnstr-1.sentence-2' class='sentence'>For the default constructor,
the number of buckets is <a class='index' id=':default_number_of_buckets_in_unordered_multimap'></a>implementation-defined<a class='hidden_link' href='#unord.multimap.cnstr-1.sentence-2'>.</a></div> <div id='unord.multimap.cnstr-1.sentence-3' class='sentence'><span class='texttt'>max_<span class='shy'></span>load_<span class='shy'></span>factor<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> returns <span class='texttt'><span class='literal'>1.0</span></span><a class='hidden_link' href='#unord.multimap.cnstr-1.sentence-3'>.</a></div></div></div></div><div class='para' id='unord.multimap.cnstr-2'><div class='marginalizedparent'><a class='marginalized' href='#unord.multimap.cnstr-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L13343'>#</a></div><div class='texpara'><div id='unord.multimap.cnstr-2.sentence-1' class='sentence'><i >Complexity</i>: Constant<a class='hidden_link' href='#unord.multimap.cnstr-2.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:unordered_multimap,constructor__'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:unordered_multimap,constructor__'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> unordered_multimap<span class='parenthesis'>(</span>InputIterator f, InputIterator l,
                     size_type n <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>,
                     <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf <span class='operator'>=</span> hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                     <span class='keyword'>const</span> key_equal<span class='operator'>&amp;</span> eql <span class='operator'>=</span> key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                     <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a <span class='operator'>=</span> allocator_type<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range_________________________________________________________________________'><span class='texttt'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> unordered_multimap<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg,
                     size_type n <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>,
                     <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf <span class='operator'>=</span> hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                     <span class='keyword'>const</span> key_equal<span class='operator'>&amp;</span> eql <span class='operator'>=</span> key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                     <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a <span class='operator'>=</span> allocator_type<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
<span class="keyword added">constexpr</span> unordered_multimap<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il,
                   size_type n <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>,
                   <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf <span class='operator'>=</span> hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                   <span class='keyword'>const</span> key_equal<span class='operator'>&amp;</span> eql <span class='operator'>=</span> key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                   <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a <span class='operator'>=</span> allocator_type<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='unord.multimap.cnstr-3'><div class='marginalizedparent'><a class='marginalized' href='#unord.multimap.cnstr-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L13370'>#</a></div><div class='texpara'><div id='unord.multimap.cnstr-3.sentence-1' class='sentence'><i >Effects</i>: Constructs an empty <span class='texttt'>unordered_<span class='shy'></span>multimap</span> using the
specified hash function, key equality predicate, and allocator, and
using at least <span class='texttt'>n</span> buckets<a class='hidden_link' href='#unord.multimap.cnstr-3.sentence-1'>.</a></div> <div id='unord.multimap.cnstr-3.sentence-2' class='sentence'>If <span class='texttt'>n</span> is not
provided, the number of buckets is <a class='index' id=':default_number_of_buckets_in_unordered_multimap_'></a>implementation-defined<a class='hidden_link' href='#unord.multimap.cnstr-3.sentence-2'>.</a></div> <div id='unord.multimap.cnstr-3.sentence-3' class='sentence'>Then
inserts elements from the range [<span class='texttt'>f, l</span>), <span class='texttt'>rg</span>, or <span class='texttt'>il</span>,
respectively<a class='hidden_link' href='#unord.multimap.cnstr-3.sentence-3'>.</a></div> <div id='unord.multimap.cnstr-3.sentence-4' class='sentence'><span class='texttt'>max_<span class='shy'></span>load_<span class='shy'></span>factor<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> returns <span class='texttt'><span class='literal'>1.0</span></span><a class='hidden_link' href='#unord.multimap.cnstr-3.sentence-4'>.</a></div></div></div></div><div class='para' id='unord.multimap.cnstr-4'><div class='marginalizedparent'><a class='marginalized' href='#unord.multimap.cnstr-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L13381'>#</a></div><div class='texpara'><div id='unord.multimap.cnstr-4.sentence-1' class='sentence'><i >Complexity</i>: Average case linear, worst case quadratic<a class='hidden_link' href='#unord.multimap.cnstr-4.sentence-1'>.</a></div></div></div></div></div><div id='unord.multimap.modifiers' class='section'><h4 ><a class='secnum' href='#unord.multimap.modifiers' style='min-width:95pt'>24.5.5.3</a> Modifiers <a class='abbr_ref' href='unord.multimap.modifiers'>[unord.multimap.modifiers]</a></h4><div class='texpara'><div id='lib:insert,unordered_multimap'><div id='lib:unordered_multimap,insert_________'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:unordered_multimap,insert_________'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> P<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>P<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='unord.multimap.modifiers-1'><div class='marginalizedparent'><a class='marginalized' href='#unord.multimap.modifiers-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L13395'>#</a></div><div class='texpara'><div id='unord.multimap.modifiers-1.sentence-1' class='sentence'><i >Constraints</i>: <span class='texttt'>is_<span class='shy'></span>constructible_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>value_<span class='shy'></span>type, P<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#unord.multimap.modifiers-1.sentence-1'>.</a></div></div></div></div><div class='para' id='unord.multimap.modifiers-2'><div class='marginalizedparent'><a class='marginalized' href='#unord.multimap.modifiers-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L13399'>#</a></div><div class='texpara'><div id='unord.multimap.modifiers-2.sentence-1' class='sentence'><i >Effects</i>: Equivalent to: <span class='texttt'><span class='keyword'>return</span> emplace<span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>P<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>obj<span class='parenthesis'>)</span><span class='parenthesis'>)</span>;</span></div></div></div></div><div class='texpara'><div id='lib:insert,unordered_multimap_'><div id='lib:unordered_multimap,insert__________'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:unordered_multimap,insert__________'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> P<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator hint, P<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='unord.multimap.modifiers-3'><div class='marginalizedparent'><a class='marginalized' href='#unord.multimap.modifiers-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L13411'>#</a></div><div class='texpara'><div id='unord.multimap.modifiers-3.sentence-1' class='sentence'><i >Constraints</i>: <span class='texttt'>is_<span class='shy'></span>constructible_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>value_<span class='shy'></span>type, P<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#unord.multimap.modifiers-3.sentence-1'>.</a></div></div></div></div><div class='para' id='unord.multimap.modifiers-4'><div class='marginalizedparent'><a class='marginalized' href='#unord.multimap.modifiers-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L13415'>#</a></div><div class='texpara'><div id='unord.multimap.modifiers-4.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='texttt'><span class='keyword'>return</span> emplace_<span class='shy'></span>hint<span class='parenthesis'>(</span>hint, std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>P<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>obj<span class='parenthesis'>)</span><span class='parenthesis'>)</span>;</span></div></div></div></div></div><div id='unord.multimap.erasure' class='section'><h4 ><a class='secnum' href='#unord.multimap.erasure' style='min-width:95pt'>24.5.5.4</a> Erasure <a class='abbr_ref' href='unord.multimap.erasure'>[unord.multimap.erasure]</a></h4><div class='texpara'><div id='lib:unordered_multimap,erase_if'><div id='lib:erase_if,unordered_multimap'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:erase_if,unordered_multimap'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K, <span class='keyword'>class</span> T, <span class='keyword'>class</span> H, <span class='keyword'>class</span> P, <span class='keyword'>class</span> A, <span class='keyword'>class</span> Predicate<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>typename</span> unordered_multimap<span class='anglebracket'>&lt;</span>K, T, H, P, A<span class='anglebracket'>&gt;</span><span class='operator'>::</span>size_type
    erase_if<span class='parenthesis'>(</span>unordered_multimap<span class='anglebracket'>&lt;</span>K, T, H, P, A<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> c, Predicate pred<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='unord.multimap.erasure-1'><div class='marginalizedparent'><a class='marginalized' href='#unord.multimap.erasure-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L13431'>#</a></div><div class='texpara'><div id='unord.multimap.erasure-1.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>auto</span> original_size <span class='operator'>=</span> c<span class='operator'>.</span>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
<span class='keyword'>for</span> <span class='parenthesis'>(</span><span class='keyword'>auto</span> i <span class='operator'>=</span> c<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, last <span class='operator'>=</span> c<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>; i <span class='operator'>!</span><span class='operator'>=</span> last; <span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
  <span class='keyword'>if</span> <span class='parenthesis'>(</span>pred<span class='parenthesis'>(</span><span class='operator'>*</span>i<span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
    i <span class='operator'>=</span> c<span class='operator'>.</span>erase<span class='parenthesis'>(</span>i<span class='parenthesis'>)</span>;
  <span class='curlybracket'>}</span> <span class='keyword'>else</span> <span class='curlybracket'>{</span>
    <span class='operator'>+</span><span class='operator'>+</span>i;
  <span class='curlybracket'>}</span>
<span class='curlybracket'>}</span>
<span class='keyword'>return</span> original_size <span class='operator'>-</span> c<span class='operator'>.</span>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
</span></div></div></div></div></div></div><div id='unord.set' class='section'><h3 ><a class='secnum' href='#unord.set' style='min-width:80pt'>24.5.6</a> Class template <span class='texttt'>unordered_<span class='shy'></span>set</span> <a class='abbr_ref' href='unord.set'>[unord.set]</a></h3><div class='texpara'><a class='index' id='lib:unordered_set_'></a></div><div id='unord.set.overview' class='section'><h4 ><a class='secnum' href='#unord.set.overview' style='min-width:95pt'>24.5.6.1</a> Overview <a class='abbr_ref' href='unord.set.overview'>[unord.set.overview]</a></h4><div class='para' id='unord.set.overview-1'><div class='marginalizedparent'><a class='marginalized' href='#unord.set.overview-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L13452'>#</a></div><div class='texpara'><div id='unord.set.overview-1.sentence-1' class='sentence'><a class='index' id=':unordered_set,unique_keys'></a><a class='index' id=':unordered_associative_containers,unique_keys___'></a>An <span class='texttt'>unordered_<span class='shy'></span>set</span> is an unordered associative container that
supports unique keys (an <span class='texttt'>unordered_<span class='shy'></span>set</span> contains at most one of each
key value) and in which the elements' keys are the elements
themselves<a class='hidden_link' href='#unord.set.overview-1.sentence-1'>.</a></div> <div id='unord.set.overview-1.sentence-2' class='sentence'>The <span class='texttt'>unordered_<span class='shy'></span>set</span> class
supports forward iterators<a class='hidden_link' href='#unord.set.overview-1.sentence-2'>.</a></div></div></div><div class='para' id='unord.set.overview-2'><div class='marginalizedparent'><a class='marginalized' href='#unord.set.overview-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L13462'>#</a></div><div class='texpara'><div id='unord.set.overview-2.sentence-1' class='sentence'>An <span class='texttt'>unordered_<span class='shy'></span>set</span> meets all of the requirements
of a container (<a href='#container.reqmts' title='24.2.2.2&emsp;Container requirements'>[container.<span class='shy'></span>reqmts]</a>),
of an allocator-aware container (<a href='#container.alloc.reqmts' title='24.2.2.5&emsp;Allocator-aware containers'>[container.<span class='shy'></span>alloc.<span class='shy'></span>reqmts]</a>),
of an unordered associative container (<a href='#unord.req' title='24.2.8&emsp;Unordered associative containers'>[unord.<span class='shy'></span>req]</a>)<a class='hidden_link' href='#unord.set.overview-2.sentence-1'>.</a></div> <div id='unord.set.overview-2.sentence-2' class='sentence'>It provides the operations described in the preceding requirements table for unique keys;
that is, an <span class='texttt'>unordered_<span class='shy'></span>set</span> supports the <span class='texttt'>a_<span class='shy'></span>uniq</span> operations in that table,
not the <span class='texttt'>a_<span class='shy'></span>eq</span> operations<a class='hidden_link' href='#unord.set.overview-2.sentence-2'>.</a></div> <div id='unord.set.overview-2.sentence-3' class='sentence'>For an <span class='texttt'>unordered_<span class='shy'></span>set<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span></span> the <span class='texttt'>key_<span class='shy'></span>type</span>
and the <span class='texttt'>value_<span class='shy'></span>type</span> are both <span class='texttt'>Key</span><a class='hidden_link' href='#unord.set.overview-2.sentence-3'>.</a></div> <div id='unord.set.overview-2.sentence-4' class='sentence'>The <span class='texttt'>iterator</span> and <span class='texttt'>const_<span class='shy'></span>iterator</span> types are both constant iterator types<a class='hidden_link' href='#unord.set.overview-2.sentence-4'>.</a></div> <div id='unord.set.overview-2.sentence-5' class='sentence'>It is unspecified whether they are the same type<a class='hidden_link' href='#unord.set.overview-2.sentence-5'>.</a></div></div></div><div class='para' id='unord.set.overview-3'><div class='marginalizedparent'><a class='marginalized' href='#unord.set.overview-3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L13475'>#</a></div><div class='texpara'><div id='unord.set.overview-3.sentence-1' class='sentence'>Subclause <a href='#unord.set' title='24.5.6&emsp;Class template unordered_&shy;set'>[unord.<span class='shy'></span>set]</a> only describes operations on <span class='texttt'>unordered_<span class='shy'></span>set</span> that
are not described in one of the requirement tables, or for which there
is additional semantic information<a class='hidden_link' href='#unord.set.overview-3.sentence-1'>.</a></div></div>

<div class='para added' id='unordered_set.overview-4'><div class='marginalizedparent'><a class='marginalized' href='#unordered_set.overview-4'>4</a></div><div class='sourceLinkParent'><a class='sourceLink' href=''>#</a></div>
<div class='texpara'>The types <span class="texttt">iterator</span> and <span class="texttt">const_iterator</span> meet the constexpr iterator requirements (<a href="iterator.requirements.general" title="25.3.1 General">[iterator.<span class="shy"></span>requirements.<span class="shy"></span>general]</a>).</div></div>

<div class='texpara'><span id='lib:unordered_set__'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:unordered_set__'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key,
           <span class='keyword'>class</span> Hash <span class='operator'>=</span> hash<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Pred <span class='operator'>=</span> equal_to<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> unordered_set <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> key_type             <span class='operator'>=</span> Key;
    <span class='keyword'>using</span> value_type           <span class='operator'>=</span> Key;
    <span class='keyword'>using</span> hasher               <span class='operator'>=</span> Hash;
    <span class='keyword'>using</span> key_equal            <span class='operator'>=</span> Pred;
    <span class='keyword'>using</span> allocator_type       <span class='operator'>=</span> Allocator;
    <span class='keyword'>using</span> pointer              <span class='operator'>=</span> <span class='keyword'>typename</span> allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>pointer;
    <span class='keyword'>using</span> const_pointer        <span class='operator'>=</span> <span class='keyword'>typename</span> allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>const_pointer;
    <span class='keyword'>using</span> reference            <span class='operator'>=</span> value_type<span class='operator'>&amp;</span>;
    <span class='keyword'>using</span> const_reference      <span class='operator'>=</span> <span class='keyword'>const</span> value_type<span class='operator'>&amp;</span>;
    <span class='keyword'>using</span> size_type            <span class='operator'>=</span> <a class='index' id=':type_of_unordered_set::size_type'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> difference_type      <span class='operator'>=</span> <a class='index' id=':type_of_unordered_set::difference_type'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>

    <span class='keyword'>using</span> iterator             <span class='operator'>=</span> <a class='index' id=':type_of_unordered_set::iterator'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> const_iterator       <span class='operator'>=</span> <a class='index' id=':type_of_unordered_set::const_iterator'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> local_iterator       <span class='operator'>=</span> <a class='index' id=':type_of_unordered_set::local_iterator'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> const_local_iterator <span class='operator'>=</span> <a class='index' id=':type_of_unordered_set::const_local_iterator'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> node_type            <span class='operator'>=</span> <i ><span class='texttt'>unspecified</span></i>;
    <span class='keyword'>using</span> insert_return_type   <span class='operator'>=</span> <i >insert-return-type</i><span class='anglebracket'>&lt;</span>iterator, node_type<span class='anglebracket'>&gt;</span>;

    <span class='comment'>// <a href='#unord.set.cnstr' title='24.5.6.2&emsp;Constructors'>[unord.<span class='shy'></span>set.<span class='shy'></span>cnstr]</a>, construct/copy/destroy</span>
    <span class="keyword added">constexpr</span> unordered_set<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> unordered_set<span class='parenthesis'>(</span>size_type n,
                           <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf <span class='operator'>=</span> hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                           <span class='keyword'>const</span> key_equal<span class='operator'>&amp;</span> eql <span class='operator'>=</span> key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                           <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a <span class='operator'>=</span> allocator_type<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> unordered_set<span class='parenthesis'>(</span>InputIterator f, InputIterator l,
                    size_type n <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>,
                    <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf <span class='operator'>=</span> hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                    <span class='keyword'>const</span> key_equal<span class='operator'>&amp;</span> eql <span class='operator'>=</span> key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                    <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a <span class='operator'>=</span> allocator_type<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range__________________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> unordered_set<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg,
                    size_type n <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>,
                    <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf <span class='operator'>=</span> hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                    <span class='keyword'>const</span> key_equal<span class='operator'>&amp;</span> eql <span class='operator'>=</span> key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                    <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a <span class='operator'>=</span> allocator_type<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> unordered_set<span class='parenthesis'>(</span><span class='keyword'>const</span> unordered_set<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> unordered_set<span class='parenthesis'>(</span>unordered_set<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> unordered_set<span class='parenthesis'>(</span><span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> unordered_set<span class='parenthesis'>(</span><span class='keyword'>const</span> unordered_set<span class='operator'>&amp;</span>, <span class='keyword'>const</span> type_identity_t<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> unordered_set<span class='parenthesis'>(</span>unordered_set<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, <span class='keyword'>const</span> type_identity_t<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> unordered_set<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il,
                  size_type n <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>,
                  <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf <span class='operator'>=</span> hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                  <span class='keyword'>const</span> key_equal<span class='operator'>&amp;</span> eql <span class='operator'>=</span> key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                  <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a <span class='operator'>=</span> allocator_type<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> unordered_set<span class='parenthesis'>(</span>size_type n, <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>
      <span class='operator'>:</span> unordered_set<span class='parenthesis'>(</span>n, hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> unordered_set<span class='parenthesis'>(</span>size_type n, <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf, <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>
      <span class='operator'>:</span> unordered_set<span class='parenthesis'>(</span>n, hf, key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> unordered_set<span class='parenthesis'>(</span>InputIterator f, InputIterator l, size_type n, <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>
        <span class='operator'>:</span> unordered_set<span class='parenthesis'>(</span>f, l, n, hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> unordered_set<span class='parenthesis'>(</span>InputIterator f, InputIterator l, size_type n, <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf,
                    <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>
      <span class='operator'>:</span> unordered_set<span class='parenthesis'>(</span>f, l, n, hf, key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> unordered_set<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il, size_type n, <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>
      <span class='operator'>:</span> unordered_set<span class='parenthesis'>(</span>il, n, hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range___________________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> unordered_set<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, size_type n, <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>
        <span class='operator'>:</span> unordered_set<span class='parenthesis'>(</span>from_range, std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>rg<span class='parenthesis'>)</span>, n, hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range____________________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> unordered_set<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, size_type n, <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf, <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>
        <span class='operator'>:</span> unordered_set<span class='parenthesis'>(</span>from_range, std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>rg<span class='parenthesis'>)</span>, n, hf, key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> unordered_set<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il, size_type n, <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf,
                  <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>
      <span class='operator'>:</span> unordered_set<span class='parenthesis'>(</span>il, n, hf, key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> <span class='operator'>~</span>unordered_set<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> unordered_set<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> unordered_set<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> unordered_set<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span>unordered_set<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span>
      <span class='keyword'>noexcept</span><span class='parenthesis'>(</span>allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>is_always_equal<span class='operator'>::</span>value <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
               is_nothrow_move_assignable_v<span class='anglebracket'>&lt;</span>Hash<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
               is_nothrow_move_assignable_v<span class='anglebracket'>&lt;</span>Pred<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> unordered_set<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> allocator_type get_allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// iterators</span>
    <span class="keyword added">constexpr</span> iterator       begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> iterator       end<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator end<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator cbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator cend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// capacity</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> size_type size<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> size_type max_size<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// <a href='#unord.set.modifiers' title='24.5.6.4&emsp;Modifiers'>[unord.<span class='shy'></span>set.<span class='shy'></span>modifiers]</a>, modifiers</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> emplace<span class='parenthesis'>(</span>Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator emplace_hint<span class='parenthesis'>(</span>const_iterator position, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> insert<span class='parenthesis'>(</span><span class='keyword'>const</span> value_type<span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> insert<span class='parenthesis'>(</span>value_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> insert<span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator hint, <span class='keyword'>const</span> value_type<span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator hint, value_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator hint, K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert<span class='parenthesis'>(</span>InputIterator first, InputIterator last<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range_____________________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert_range<span class='parenthesis'>(</span>R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> node_type extract<span class='parenthesis'>(</span>const_iterator position<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> node_type extract<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> node_type extract<span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> insert_return_type insert<span class='parenthesis'>(</span>node_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> nh<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator           insert<span class='parenthesis'>(</span>const_iterator hint, node_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> nh<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> iterator  erase<span class='parenthesis'>(</span>iterator position<span class='parenthesis'>)</span>
      <span class='keyword'>requires</span> <span class='parenthesis'>(</span><span class='operator'>!</span><a href='concept.same#concept:same_as' title='18.4.2&emsp;Concept same_&shy;as&emsp;[concept.same]'><span id='conceptref:same_as__'><span class='tcode_in_codeblock'>same_<span class='shy'></span>as</span></span></a><span class='anglebracket'>&lt;</span>iterator, const_iterator<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator  erase<span class='parenthesis'>(</span>const_iterator position<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> size_type erase<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> size_type erase<span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator  erase<span class='parenthesis'>(</span>const_iterator first, const_iterator last<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span>      swap<span class='parenthesis'>(</span>unordered_set<span class='operator'>&amp;</span><span class='parenthesis'>)</span>
      <span class='keyword'>noexcept</span><span class='parenthesis'>(</span>allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>is_always_equal<span class='operator'>::</span>value <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
               is_nothrow_swappable_v<span class='anglebracket'>&lt;</span>Hash<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
               is_nothrow_swappable_v<span class='anglebracket'>&lt;</span>Pred<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span>      clear<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;

    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> H2, <span class='keyword'>class</span> P2<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>unordered_set<span class='anglebracket'>&lt;</span>Key, H2, P2, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> source<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> H2, <span class='keyword'>class</span> P2<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>unordered_set<span class='anglebracket'>&lt;</span>Key, H2, P2, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span><span class='operator'>&amp;</span> source<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> H2, <span class='keyword'>class</span> P2<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>unordered_multiset<span class='anglebracket'>&lt;</span>Key, H2, P2, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> source<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> H2, <span class='keyword'>class</span> P2<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>unordered_multiset<span class='anglebracket'>&lt;</span>Key, H2, P2, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span><span class='operator'>&amp;</span> source<span class='parenthesis'>)</span>;

    <span class='comment'>// observers</span>
    <span class="keyword added">constexpr</span> hasher hash_function<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> key_equal key_eq<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// set operations</span>
    <span class="keyword added">constexpr</span> iterator         find<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> const_iterator   find<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> iterator       find<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> const_iterator find<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> size_type        count<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> size_type      count<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>bool</span>             contains<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>bool</span>           contains<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, iterator<span class='anglebracket'>&gt;</span>               equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>const_iterator, const_iterator<span class='anglebracket'>&gt;</span>   equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, iterator<span class='anglebracket'>&gt;</span>             equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>const_iterator, const_iterator<span class='anglebracket'>&gt;</span> equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// bucket interface</span>
    <span class="keyword added">constexpr</span> size_type bucket_count<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> size_type max_bucket_count<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> size_type bucket_size<span class='parenthesis'>(</span>size_type n<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> size_type bucket<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> size_type bucket<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> local_iterator begin<span class='parenthesis'>(</span>size_type n<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> const_local_iterator begin<span class='parenthesis'>(</span>size_type n<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> local_iterator end<span class='parenthesis'>(</span>size_type n<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> const_local_iterator end<span class='parenthesis'>(</span>size_type n<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> const_local_iterator cbegin<span class='parenthesis'>(</span>size_type n<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> const_local_iterator cend<span class='parenthesis'>(</span>size_type n<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// hash policy</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>float</span> load_factor<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>float</span> max_load_factor<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> max_load_factor<span class='parenthesis'>(</span><span class='keyword'>float</span> z<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> rehash<span class='parenthesis'>(</span>size_type n<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> reserve<span class='parenthesis'>(</span>size_type n<span class='parenthesis'>)</span>;
  <span class='curlybracket'>}</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator,
           <span class='keyword'>class</span> Hash <span class='operator'>=</span> hash<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Pred <span class='operator'>=</span> equal_to<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    unordered_set<span class='parenthesis'>(</span>InputIterator, InputIterator, <span class='keyword'>typename</span> <i ><span class='texttt'>see below</span></i><span class='operator'>::</span>size_type <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>,
                  Hash <span class='operator'>=</span> Hash<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, Pred <span class='operator'>=</span> Pred<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, Allocator <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_set<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>,
                       Hash, Pred, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range________________________'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R,
           <span class='keyword'>class</span> Hash <span class='operator'>=</span> hash<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Pred <span class='operator'>=</span> equal_to<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    unordered_set<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, <span class='keyword'>typename</span> <i ><span class='texttt'>see below</span></i><span class='operator'>::</span>size_type <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>,
Hash <span class='operator'>=</span> Hash<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, Pred <span class='operator'>=</span> Pred<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, Allocator <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_set<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, Hash, Pred, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Hash <span class='operator'>=</span> hash<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Pred <span class='operator'>=</span> equal_to<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>, <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    unordered_set<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>, <span class='keyword'>typename</span> <i ><span class='texttt'>see below</span></i><span class='operator'>::</span>size_type <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>,
                  Hash <span class='operator'>=</span> Hash<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, Pred <span class='operator'>=</span> Pred<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, Allocator <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_set<span class='anglebracket'>&lt;</span>T, Hash, Pred, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    unordered_set<span class='parenthesis'>(</span>InputIterator, InputIterator, <span class='keyword'>typename</span> <i ><span class='texttt'>see below</span></i><span class='operator'>::</span>size_type, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_set<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>,
                       hash<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
                       equal_to<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
                       Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Hash, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    unordered_set<span class='parenthesis'>(</span>InputIterator, InputIterator, <span class='keyword'>typename</span> <i ><span class='texttt'>see below</span></i><span class='operator'>::</span>size_type,
                  Hash, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_set<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>, Hash,
                       equal_to<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
                       Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range_________________________'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    unordered_set<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, <span class='keyword'>typename</span> <i ><span class='texttt'>see below</span></i><span class='operator'>::</span>size_type, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_set<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, hash<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
                       equal_to<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range__________________________'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    unordered_set<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_set<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, hash<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
                       equal_to<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range___________________________'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R, <span class='keyword'>class</span> Hash, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    unordered_set<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, <span class='keyword'>typename</span> <i ><span class='texttt'>see below</span></i><span class='operator'>::</span>size_type, Hash, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_set<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, Hash,
                       equal_to<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    unordered_set<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>, <span class='keyword'>typename</span> <i ><span class='texttt'>see below</span></i><span class='operator'>::</span>size_type, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_set<span class='anglebracket'>&lt;</span>T, hash<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>, equal_to<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Hash, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    unordered_set<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>, <span class='keyword'>typename</span> <i ><span class='texttt'>see below</span></i><span class='operator'>::</span>size_type, Hash, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_set<span class='anglebracket'>&lt;</span>T, Hash, equal_to<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>}</span>
</span></span></div></div><div class='para' id='unord.set.overview-4'><div class='marginalizedparent'><a class='marginalized' href='#unord.set.overview-4'>4</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L13729'>#</a></div><div class='texpara'><div id='unord.set.overview-4.sentence-1' class='sentence'>A <span class='texttt'>size_<span class='shy'></span>type</span> parameter type in an <span class='texttt'>unordered_<span class='shy'></span>set</span> deduction guide
refers to the <span class='texttt'>size_<span class='shy'></span>type</span> member type of
the type deduced by the deduction guide<a class='hidden_link' href='#unord.set.overview-4.sentence-1'>.</a></div></div></div></div><div id='unord.set.cnstr' class='section'><h4 ><a class='secnum' href='#unord.set.cnstr' style='min-width:95pt'>24.5.6.2</a> Constructors <a class='abbr_ref' href='unord.set.cnstr'>[unord.set.cnstr]</a></h4><div class='texpara'><div id='lib:unordered_set,constructor_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:unordered_set,constructor_'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> unordered_set<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>:</span> unordered_set<span class='parenthesis'>(</span>size_type<span class='parenthesis'>(</span><i ><span class='texttt'>see below</span></i><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
<span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> unordered_set<span class='parenthesis'>(</span>size_type n,
                       <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf <span class='operator'>=</span> hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                       <span class='keyword'>const</span> key_equal<span class='operator'>&amp;</span> eql <span class='operator'>=</span> key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                       <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a <span class='operator'>=</span> allocator_type<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='unord.set.cnstr-1'><div class='marginalizedparent'><a class='marginalized' href='#unord.set.cnstr-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L13746'>#</a></div><div class='texpara'><div id='unord.set.cnstr-1.sentence-1' class='sentence'><i >Effects</i>: Constructs an empty <span class='texttt'>unordered_<span class='shy'></span>set</span> using the
specified hash function, key equality predicate, and allocator, and
using at least <span class='texttt'>n</span> buckets<a class='hidden_link' href='#unord.set.cnstr-1.sentence-1'>.</a></div> <div id='unord.set.cnstr-1.sentence-2' class='sentence'>For the default constructor,
the number of buckets is <a class='index' id=':default_number_of_buckets_in_unordered_set'></a>implementation-defined<a class='hidden_link' href='#unord.set.cnstr-1.sentence-2'>.</a></div> <div id='unord.set.cnstr-1.sentence-3' class='sentence'><span class='texttt'>max_<span class='shy'></span>load_<span class='shy'></span>factor<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> returns <span class='texttt'><span class='literal'>1.0</span></span><a class='hidden_link' href='#unord.set.cnstr-1.sentence-3'>.</a></div></div></div></div><div class='para' id='unord.set.cnstr-2'><div class='marginalizedparent'><a class='marginalized' href='#unord.set.cnstr-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L13755'>#</a></div><div class='texpara'><div id='unord.set.cnstr-2.sentence-1' class='sentence'><i >Complexity</i>: Constant<a class='hidden_link' href='#unord.set.cnstr-2.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:unordered_set,constructor__'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:unordered_set,constructor__'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> unordered_set<span class='parenthesis'>(</span>InputIterator f, InputIterator l,
                size_type n <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>,
                <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf <span class='operator'>=</span> hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                <span class='keyword'>const</span> key_equal<span class='operator'>&amp;</span> eql <span class='operator'>=</span> key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a <span class='operator'>=</span> allocator_type<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range______________________________________________________________________________'><span class='texttt'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> unordered_multiset<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg,
                     size_type n <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>,
                     <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf <span class='operator'>=</span> hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                     <span class='keyword'>const</span> key_equal<span class='operator'>&amp;</span> eql <span class='operator'>=</span> key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                     <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a <span class='operator'>=</span> allocator_type<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
<span class="keyword added">constexpr</span> unordered_set<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il,
              size_type n <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>,
              <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf <span class='operator'>=</span> hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
              <span class='keyword'>const</span> key_equal<span class='operator'>&amp;</span> eql <span class='operator'>=</span> key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
              <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a <span class='operator'>=</span> allocator_type<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='unord.set.cnstr-3'><div class='marginalizedparent'><a class='marginalized' href='#unord.set.cnstr-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L13782'>#</a></div><div class='texpara'><div id='unord.set.cnstr-3.sentence-1' class='sentence'><i >Effects</i>: Constructs an empty <span class='texttt'>unordered_<span class='shy'></span>set</span> using the
specified hash function, key equality predicate, and allocator, and
using at least <span class='texttt'>n</span> buckets<a class='hidden_link' href='#unord.set.cnstr-3.sentence-1'>.</a></div> <div id='unord.set.cnstr-3.sentence-2' class='sentence'>If <span class='texttt'>n</span> is not
provided, the number of buckets is <a class='index' id=':default_number_of_buckets_in_unordered_set_'></a>implementation-defined<a class='hidden_link' href='#unord.set.cnstr-3.sentence-2'>.</a></div> <div id='unord.set.cnstr-3.sentence-3' class='sentence'>Then
inserts elements from the range [<span class='texttt'>f, l</span>), <span class='texttt'>rg</span>, or <span class='texttt'>il</span>,
respectively<a class='hidden_link' href='#unord.set.cnstr-3.sentence-3'>.</a></div> <div id='unord.set.cnstr-3.sentence-4' class='sentence'><span class='texttt'>max_<span class='shy'></span>load_<span class='shy'></span>factor<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> returns <span class='texttt'><span class='literal'>1.0</span></span><a class='hidden_link' href='#unord.set.cnstr-3.sentence-4'>.</a></div></div></div></div><div class='para' id='unord.set.cnstr-4'><div class='marginalizedparent'><a class='marginalized' href='#unord.set.cnstr-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L13793'>#</a></div><div class='texpara'><div id='unord.set.cnstr-4.sentence-1' class='sentence'><i >Complexity</i>: Average case linear, worst case quadratic<a class='hidden_link' href='#unord.set.cnstr-4.sentence-1'>.</a></div></div></div></div></div><div id='unord.set.erasure' class='section'><h4 ><a class='secnum' href='#unord.set.erasure' style='min-width:95pt'>24.5.6.3</a> Erasure <a class='abbr_ref' href='unord.set.erasure'>[unord.set.erasure]</a></h4><div class='texpara'><div id='lib:unordered_set,erase_if'><div id='lib:erase_if,unordered_set'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:erase_if,unordered_set'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K, <span class='keyword'>class</span> H, <span class='keyword'>class</span> P, <span class='keyword'>class</span> A, <span class='keyword'>class</span> Predicate<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>typename</span> unordered_set<span class='anglebracket'>&lt;</span>K, H, P, A<span class='anglebracket'>&gt;</span><span class='operator'>::</span>size_type
    erase_if<span class='parenthesis'>(</span>unordered_set<span class='anglebracket'>&lt;</span>K, H, P, A<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> c, Predicate pred<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='unord.set.erasure-1'><div class='marginalizedparent'><a class='marginalized' href='#unord.set.erasure-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L13808'>#</a></div><div class='texpara'><div id='unord.set.erasure-1.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>auto</span> original_size <span class='operator'>=</span> c<span class='operator'>.</span>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
<span class='keyword'>for</span> <span class='parenthesis'>(</span><span class='keyword'>auto</span> i <span class='operator'>=</span> c<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, last <span class='operator'>=</span> c<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>; i <span class='operator'>!</span><span class='operator'>=</span> last; <span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
  <span class='keyword'>if</span> <span class='parenthesis'>(</span>pred<span class='parenthesis'>(</span><span class='operator'>*</span>i<span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
    i <span class='operator'>=</span> c<span class='operator'>.</span>erase<span class='parenthesis'>(</span>i<span class='parenthesis'>)</span>;
  <span class='curlybracket'>}</span> <span class='keyword'>else</span> <span class='curlybracket'>{</span>
    <span class='operator'>+</span><span class='operator'>+</span>i;
  <span class='curlybracket'>}</span>
<span class='curlybracket'>}</span>
<span class='keyword'>return</span> original_size <span class='operator'>-</span> c<span class='operator'>.</span>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
</span></div></div></div></div></div><div id='unord.set.modifiers' class='section'><h4 ><a class='secnum' href='#unord.set.modifiers' style='min-width:95pt'>24.5.6.4</a> Modifiers <a class='abbr_ref' href='unord.set.modifiers'>[unord.set.modifiers]</a></h4><div class='texpara'><div id='lib:unordered_set,insert_________'><div id='lib:insert,unordered_set'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:insert,unordered_set'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> insert<span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator hint, K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='unord.set.modifiers-1'><div class='marginalizedparent'><a class='marginalized' href='#unord.set.modifiers-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L13833'>#</a></div><div class='texpara'><div id='unord.set.modifiers-1.sentence-1' class='sentence'><i >Constraints</i>: The <a href='expr.prim.id.qual#nt:qualified-id' title='7.5.5.3&emsp;Qualified names&emsp;[expr.prim.id.qual]'><span id='ntref:qualified-id_______________'><span class='textsf'><i >qualified-id</i></span></span></a><i >s</i> <span class='texttt'>Hash<span class='operator'>&#x200b;::&#x200b;</span>is_<span class='shy'></span>transparent</span> and
<span class='texttt'>Pred<span class='operator'>&#x200b;::&#x200b;</span>is_<span class='shy'></span>transparent</span> are valid and denote types<a class='hidden_link' href='#unord.set.modifiers-1.sentence-1'>.</a></div> <div id='unord.set.modifiers-1.sentence-2' class='sentence'>For the second overload,
<span class='texttt'>is_<span class='shy'></span>convertible_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, const_<span class='shy'></span>iterator<span class='anglebracket'>&gt;</span></span> and
<span class='texttt'>is_<span class='shy'></span>convertible_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, iterator<span class='anglebracket'>&gt;</span></span> are both <span class='texttt'><span class='literal'>false</span></span><a class='hidden_link' href='#unord.set.modifiers-1.sentence-2'>.</a></div></div></div></div><div class='para' id='unord.set.modifiers-2'><div class='marginalizedparent'><a class='marginalized' href='#unord.set.modifiers-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L13841'>#</a></div><div class='texpara'><div id='unord.set.modifiers-2.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>value_<span class='shy'></span>type</span> is <i >Cpp17EmplaceConstructible</i>
into <span class='texttt'>unordered_<span class='shy'></span>set</span> from <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>K<span class='anglebracket'>&gt;</span><br><span class='parenthesis'>(</span>obj<span class='parenthesis'>)</span></span><a class='hidden_link' href='#unord.set.modifiers-2.sentence-1'>.</a></div></div></div></div><div class='para' id='unord.set.modifiers-3'><div class='marginalizedparent'><a class='marginalized' href='#unord.set.modifiers-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L13846'>#</a></div><div class='texpara'><div id='unord.set.modifiers-3.sentence-1' class='sentence'><i >Effects</i>: If the set already contains an element that is equivalent to <span class='texttt'>obj</span>,
there is no effect<a class='hidden_link' href='#unord.set.modifiers-3.sentence-1'>.</a></div> <div id='unord.set.modifiers-3.sentence-2' class='sentence'>Otherwise, let <span class='texttt'>h</span> be <span class='texttt'>hash_<span class='shy'></span>function<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>obj<span class='parenthesis'>)</span></span><a class='hidden_link' href='#unord.set.modifiers-3.sentence-2'>.</a></div> <div id='unord.set.modifiers-3.sentence-3' class='sentence'>Constructs an object <span class='texttt'>u</span> of type <span class='texttt'>value_<span class='shy'></span>type</span>
with <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>K<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>obj<span class='parenthesis'>)</span></span><a class='hidden_link' href='#unord.set.modifiers-3.sentence-3'>.</a></div> <div id='unord.set.modifiers-3.sentence-4' class='sentence'>If <span class='texttt'>hash_<span class='shy'></span>function<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>u<span class='parenthesis'>)</span> <span class='operator'>!</span><span class='operator'>=</span> h <span class='operator'>|</span><span class='operator'>|</span> contains<span class='parenthesis'>(</span>u<span class='parenthesis'>)</span></span> is <span class='texttt'><span class='literal'>true</span></span>,
the behavior is undefined<a class='hidden_link' href='#unord.set.modifiers-3.sentence-4'>.</a></div> <div id='unord.set.modifiers-3.sentence-5' class='sentence'>Inserts <span class='texttt'>u</span> into <span class='texttt'><span class='operator'>*</span><span class='keyword'>this</span></span><a class='hidden_link' href='#unord.set.modifiers-3.sentence-5'>.</a></div></div></div></div><div class='para' id='unord.set.modifiers-4'><div class='marginalizedparent'><a class='marginalized' href='#unord.set.modifiers-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L13857'>#</a></div><div class='texpara'><div id='unord.set.modifiers-4.sentence-1' class='sentence'><i >Returns</i>: For the first overload,
the <span class='texttt'><span class='keyword'>bool</span></span> component of the returned pair is <span class='texttt'><span class='literal'>true</span></span>
if and only if the insertion took place<a class='hidden_link' href='#unord.set.modifiers-4.sentence-1'>.</a></div> <div id='unord.set.modifiers-4.sentence-2' class='sentence'>The returned iterator points to the set element
that is equivalent to <span class='texttt'>obj</span><a class='hidden_link' href='#unord.set.modifiers-4.sentence-2'>.</a></div></div></div></div><div class='para' id='unord.set.modifiers-5'><div class='marginalizedparent'><a class='marginalized' href='#unord.set.modifiers-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L13865'>#</a></div><div class='texpara'><div id='unord.set.modifiers-5.sentence-1' class='sentence'><i >Complexity</i>: Average case constant, worst case linear<a class='hidden_link' href='#unord.set.modifiers-5.sentence-1'>.</a></div></div></div></div></div></div><div id='unord.multiset' class='section'><h3 ><a class='secnum' href='#unord.multiset' style='min-width:80pt'>24.5.7</a> Class template <span class='texttt'>unordered_<span class='shy'></span>multiset</span> <a class='abbr_ref' href='unord.multiset'>[unord.multiset]</a></h3><div class='texpara'><a class='index' id='lib:unordered_multiset_'></a></div><div id='unord.multiset.overview' class='section'><h4 ><a class='secnum' href='#unord.multiset.overview' style='min-width:95pt'>24.5.7.1</a> Overview <a class='abbr_ref' href='unord.multiset.overview'>[unord.multiset.overview]</a></h4><div class='para' id='unord.multiset.overview-1'><div class='marginalizedparent'><a class='marginalized' href='#unord.multiset.overview-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L13875'>#</a></div><div class='texpara'><div id='unord.multiset.overview-1.sentence-1' class='sentence'><a class='index' id=':unordered_multiset,equivalent_keys'></a><a class='index' id=':unordered_associative_containers,equivalent_keys___'></a>An <span class='texttt'>unordered_<span class='shy'></span>multiset</span> is an unordered associative container
that supports equivalent keys (an instance of <span class='texttt'>unordered_<span class='shy'></span>multiset</span> may contain
multiple copies of the same key value) and in which each element's key
is the element itself<a class='hidden_link' href='#unord.multiset.overview-1.sentence-1'>.</a></div> <div id='unord.multiset.overview-1.sentence-2' class='sentence'>The <span class='texttt'>unordered_<span class='shy'></span>multiset</span> class
supports forward iterators<a class='hidden_link' href='#unord.multiset.overview-1.sentence-2'>.</a></div></div></div><div class='para' id='unord.multiset.overview-2'><div class='marginalizedparent'><a class='marginalized' href='#unord.multiset.overview-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L13885'>#</a></div><div class='texpara'><div id='unord.multiset.overview-2.sentence-1' class='sentence'>An <span class='texttt'>unordered_<span class='shy'></span>multiset</span> meets all of the requirements
of a container (<a href='#container.reqmts' title='24.2.2.2&emsp;Container requirements'>[container.<span class='shy'></span>reqmts]</a>),
of an allocator-aware container (<a href='#container.alloc.reqmts' title='24.2.2.5&emsp;Allocator-aware containers'>[container.<span class='shy'></span>alloc.<span class='shy'></span>reqmts]</a>), and
of an unordered associative container (<a href='#unord.req' title='24.2.8&emsp;Unordered associative containers'>[unord.<span class='shy'></span>req]</a>)<a class='hidden_link' href='#unord.multiset.overview-2.sentence-1'>.</a></div> <div id='unord.multiset.overview-2.sentence-2' class='sentence'>It provides the operations described in the
preceding requirements table for equivalent keys; that is, an <span class='texttt'>unordered_<span class='shy'></span>multiset</span>
supports the <span class='texttt'>a_<span class='shy'></span>eq</span> operations in that table, not the <span class='texttt'>a_<span class='shy'></span>uniq</span> operations<a class='hidden_link' href='#unord.multiset.overview-2.sentence-2'>.</a></div> <div id='unord.multiset.overview-2.sentence-3' class='sentence'>For an <span class='texttt'>unordered_<span class='shy'></span>multiset<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span></span> the <span class='texttt'>key_<span class='shy'></span>type</span> and the <span class='texttt'>value_<span class='shy'></span>type</span> are
both <span class='texttt'>Key</span><a class='hidden_link' href='#unord.multiset.overview-2.sentence-3'>.</a></div> <div id='unord.multiset.overview-2.sentence-4' class='sentence'>The <span class='texttt'>iterator</span> and <span class='texttt'>const_<span class='shy'></span>iterator</span> types are both
constant iterator types<a class='hidden_link' href='#unord.multiset.overview-2.sentence-4'>.</a></div> <div id='unord.multiset.overview-2.sentence-5' class='sentence'>It is unspecified whether they are the same type<a class='hidden_link' href='#unord.multiset.overview-2.sentence-5'>.</a></div></div></div><div class='para' id='unord.multiset.overview-3'><div class='marginalizedparent'><a class='marginalized' href='#unord.multiset.overview-3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L13897'>#</a></div><div class='texpara'><div id='unord.multiset.overview-3.sentence-1' class='sentence'>Subclause <a href='#unord.multiset' title='24.5.7&emsp;Class template unordered_&shy;multiset'>[unord.<span class='shy'></span>multiset]</a> only describes operations on <span class='texttt'>unordered_<span class='shy'></span>multiset</span> that
are not described in one of the requirement tables, or for which there
is additional semantic information<a class='hidden_link' href='#unord.multiset.overview-3.sentence-1'>.</a></div></div>

<div class='para added' id='unordered_multiset.overview-4'><div class='marginalizedparent'><a class='marginalized' href='#unordered_multiset.overview-4'>4</a></div><div class='sourceLinkParent'><a class='sourceLink' href=''>#</a></div>
<div class='texpara'>The types <span class="texttt">iterator</span> and <span class="texttt">const_iterator</span> meet the constexpr iterator requirements (<a href="iterator.requirements.general" title="25.3.1 General">[iterator.<span class="shy"></span>requirements.<span class="shy"></span>general]</a>).</div></div>

<div class='texpara'><span id='lib:unordered_multiset__'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:unordered_multiset__'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key,
           <span class='keyword'>class</span> Hash <span class='operator'>=</span> hash<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Pred <span class='operator'>=</span> equal_to<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> unordered_multiset <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> key_type             <span class='operator'>=</span> Key;
    <span class='keyword'>using</span> value_type           <span class='operator'>=</span> Key;
    <span class='keyword'>using</span> hasher               <span class='operator'>=</span> Hash;
    <span class='keyword'>using</span> key_equal            <span class='operator'>=</span> Pred;
    <span class='keyword'>using</span> allocator_type       <span class='operator'>=</span> Allocator;
    <span class='keyword'>using</span> pointer              <span class='operator'>=</span> <span class='keyword'>typename</span> allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>pointer;
    <span class='keyword'>using</span> const_pointer        <span class='operator'>=</span> <span class='keyword'>typename</span> allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>const_pointer;
    <span class='keyword'>using</span> reference            <span class='operator'>=</span> value_type<span class='operator'>&amp;</span>;
    <span class='keyword'>using</span> const_reference      <span class='operator'>=</span> <span class='keyword'>const</span> value_type<span class='operator'>&amp;</span>;
    <span class='keyword'>using</span> size_type            <span class='operator'>=</span> <a class='index' id=':type_of_unordered_multiset::size_type'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> difference_type      <span class='operator'>=</span> <a class='index' id=':type_of_unordered_multiset::difference_type'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>

    <span class='keyword'>using</span> iterator             <span class='operator'>=</span> <a class='index' id=':type_of_unordered_multiset::iterator'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> const_iterator       <span class='operator'>=</span> <a class='index' id=':type_of_unordered_multiset::const_iterator'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> local_iterator       <span class='operator'>=</span> <a class='index' id=':type_of_unordered_multiset::local_iterator'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> const_local_iterator <span class='operator'>=</span> <a class='index' id=':type_of_unordered_multiset::const_local_iterator'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> node_type            <span class='operator'>=</span> <i ><span class='texttt'>unspecified</span></i>;

    <span class='comment'>// <a href='#unord.multiset.cnstr' title='24.5.7.2&emsp;Constructors'>[unord.<span class='shy'></span>multiset.<span class='shy'></span>cnstr]</a>, construct/copy/destroy</span>
    <span class="keyword added">constexpr</span> unordered_multiset<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> unordered_multiset<span class='parenthesis'>(</span>size_type n,
                                <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf <span class='operator'>=</span> hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                                <span class='keyword'>const</span> key_equal<span class='operator'>&amp;</span> eql <span class='operator'>=</span> key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                                <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a <span class='operator'>=</span> allocator_type<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> unordered_multiset<span class='parenthesis'>(</span>InputIterator f, InputIterator l,
                         size_type n <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>,
                         <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf <span class='operator'>=</span> hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                         <span class='keyword'>const</span> key_equal<span class='operator'>&amp;</span> eql <span class='operator'>=</span> key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                         <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a <span class='operator'>=</span> allocator_type<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range_______________________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> unordered_multiset<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg,
                         size_type n <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>,
                         <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf <span class='operator'>=</span> hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                         <span class='keyword'>const</span> key_equal<span class='operator'>&amp;</span> eql <span class='operator'>=</span> key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                         <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a <span class='operator'>=</span> allocator_type<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> unordered_multiset<span class='parenthesis'>(</span><span class='keyword'>const</span> unordered_multiset<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> unordered_multiset<span class='parenthesis'>(</span>unordered_multiset<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> unordered_multiset<span class='parenthesis'>(</span><span class='keyword'>const</span> Allocator<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> unordered_multiset<span class='parenthesis'>(</span><span class='keyword'>const</span> unordered_multiset<span class='operator'>&amp;</span>, <span class='keyword'>const</span> type_identity_t<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> unordered_multiset<span class='parenthesis'>(</span>unordered_multiset<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, <span class='keyword'>const</span> type_identity_t<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> unordered_multiset<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il,
                       size_type n <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>,
                       <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf <span class='operator'>=</span> hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                       <span class='keyword'>const</span> key_equal<span class='operator'>&amp;</span> eql <span class='operator'>=</span> key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                       <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a <span class='operator'>=</span> allocator_type<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> unordered_multiset<span class='parenthesis'>(</span>size_type n, <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>
      <span class='operator'>:</span> unordered_multiset<span class='parenthesis'>(</span>n, hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> unordered_multiset<span class='parenthesis'>(</span>size_type n, <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf, <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>
      <span class='operator'>:</span> unordered_multiset<span class='parenthesis'>(</span>n, hf, key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> unordered_multiset<span class='parenthesis'>(</span>InputIterator f, InputIterator l, size_type n, <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>
        <span class='operator'>:</span> unordered_multiset<span class='parenthesis'>(</span>f, l, n, hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> unordered_multiset<span class='parenthesis'>(</span>InputIterator f, InputIterator l, size_type n, <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf,
                         <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>
      <span class='operator'>:</span> unordered_multiset<span class='parenthesis'>(</span>f, l, n, hf, key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range________________________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> unordered_multiset<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, size_type n, <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>
        <span class='operator'>:</span> unordered_multiset<span class='parenthesis'>(</span>from_range, std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>rg<span class='parenthesis'>)</span>,
                             n, hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range_________________________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> unordered_multiset<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, size_type n, <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf,
                         <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>
        <span class='operator'>:</span> unordered_multiset<span class='parenthesis'>(</span>from_range, std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>rg<span class='parenthesis'>)</span>, n, hf, key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> unordered_multiset<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il, size_type n, <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>
      <span class='operator'>:</span> unordered_multiset<span class='parenthesis'>(</span>il, n, hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> unordered_multiset<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il, size_type n, <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf,
                       <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>
      <span class='operator'>:</span> unordered_multiset<span class='parenthesis'>(</span>il, n, hf, key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> <span class='operator'>~</span>unordered_multiset<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> unordered_multiset<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> unordered_multiset<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> unordered_multiset<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span>unordered_multiset<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span>
      <span class='keyword'>noexcept</span><span class='parenthesis'>(</span>allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>is_always_equal<span class='operator'>::</span>value <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
               is_nothrow_move_assignable_v<span class='anglebracket'>&lt;</span>Hash<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
               is_nothrow_move_assignable_v<span class='anglebracket'>&lt;</span>Pred<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> unordered_multiset<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> allocator_type get_allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// iterators</span>
    <span class="keyword added">constexpr</span> iterator       begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> iterator       end<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator end<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator cbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator cend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// capacity</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> size_type size<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> size_type max_size<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// modifiers</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator emplace<span class='parenthesis'>(</span>Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator emplace_hint<span class='parenthesis'>(</span>const_iterator position, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span><span class='keyword'>const</span> value_type<span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>value_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator hint, <span class='keyword'>const</span> value_type<span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator hint, value_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert<span class='parenthesis'>(</span>InputIterator first, InputIterator last<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range__________________________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert_range<span class='parenthesis'>(</span>R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> node_type extract<span class='parenthesis'>(</span>const_iterator position<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> node_type extract<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> node_type extract<span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>node_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> nh<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator hint, node_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> nh<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> iterator  erase<span class='parenthesis'>(</span>iterator position<span class='parenthesis'>)</span>
      <span class='keyword'>requires</span> <span class='parenthesis'>(</span><span class='operator'>!</span><a href='concept.same#concept:same_as' title='18.4.2&emsp;Concept same_&shy;as&emsp;[concept.same]'><span id='conceptref:same_as___'><span class='tcode_in_codeblock'>same_<span class='shy'></span>as</span></span></a><span class='anglebracket'>&lt;</span>iterator, const_iterator<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator  erase<span class='parenthesis'>(</span>const_iterator position<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> size_type erase<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> size_type erase<span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator  erase<span class='parenthesis'>(</span>const_iterator first, const_iterator last<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span>      swap<span class='parenthesis'>(</span>unordered_multiset<span class='operator'>&amp;</span><span class='parenthesis'>)</span>
      <span class='keyword'>noexcept</span><span class='parenthesis'>(</span>allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span>is_always_equal<span class='operator'>::</span>value <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
               is_nothrow_swappable_v<span class='anglebracket'>&lt;</span>Hash<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
               is_nothrow_swappable_v<span class='anglebracket'>&lt;</span>Pred<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span>      clear<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;

    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> H2, <span class='keyword'>class</span> P2<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>unordered_multiset<span class='anglebracket'>&lt;</span>Key, H2, P2, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> source<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> H2, <span class='keyword'>class</span> P2<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>unordered_multiset<span class='anglebracket'>&lt;</span>Key, H2, P2, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span><span class='operator'>&amp;</span> source<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> H2, <span class='keyword'>class</span> P2<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>unordered_set<span class='anglebracket'>&lt;</span>Key, H2, P2, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> source<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> H2, <span class='keyword'>class</span> P2<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> merge<span class='parenthesis'>(</span>unordered_set<span class='anglebracket'>&lt;</span>Key, H2, P2, Allocator<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span><span class='operator'>&amp;</span> source<span class='parenthesis'>)</span>;

    <span class='comment'>// observers</span>
    <span class="keyword added">constexpr</span> hasher hash_function<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> key_equal key_eq<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// set operations</span>
    <span class="keyword added">constexpr</span> iterator         find<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> const_iterator   find<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> iterator       find<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> const_iterator find<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> size_type        count<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> size_type      count<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>bool</span>             contains<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>bool</span>           contains<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, iterator<span class='anglebracket'>&gt;</span>               equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>const_iterator, const_iterator<span class='anglebracket'>&gt;</span>   equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, iterator<span class='anglebracket'>&gt;</span>             equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>const_iterator, const_iterator<span class='anglebracket'>&gt;</span> equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// bucket interface</span>
    <span class="keyword added">constexpr</span> size_type bucket_count<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> size_type max_bucket_count<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> size_type bucket_size<span class='parenthesis'>(</span>size_type n<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> size_type bucket<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> size_type bucket<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> k<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> local_iterator begin<span class='parenthesis'>(</span>size_type n<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> const_local_iterator begin<span class='parenthesis'>(</span>size_type n<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> local_iterator end<span class='parenthesis'>(</span>size_type n<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> const_local_iterator end<span class='parenthesis'>(</span>size_type n<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> const_local_iterator cbegin<span class='parenthesis'>(</span>size_type n<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> const_local_iterator cend<span class='parenthesis'>(</span>size_type n<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// hash policy</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>float</span> load_factor<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>float</span> max_load_factor<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> max_load_factor<span class='parenthesis'>(</span><span class='keyword'>float</span> z<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> rehash<span class='parenthesis'>(</span>size_type n<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> reserve<span class='parenthesis'>(</span>size_type n<span class='parenthesis'>)</span>;
  <span class='curlybracket'>}</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator,
           <span class='keyword'>class</span> Hash <span class='operator'>=</span> hash<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Pred <span class='operator'>=</span> equal_to<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    unordered_multiset<span class='parenthesis'>(</span>InputIterator, InputIterator, <i ><span class='texttt'>see below</span></i><span class='operator'>::</span>size_type <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>,
                       Hash <span class='operator'>=</span> Hash<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, Pred <span class='operator'>=</span> Pred<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, Allocator <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_multiset<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>,
                            Hash, Pred, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range____________________________'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R,
           <span class='keyword'>class</span> Hash <span class='operator'>=</span> hash<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Pred <span class='operator'>=</span> equal_to<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    unordered_multiset<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, <span class='keyword'>typename</span> <i ><span class='texttt'>see below</span></i><span class='operator'>::</span>size_type <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>,
                       Hash <span class='operator'>=</span> Hash<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, Pred <span class='operator'>=</span> Pred<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, Allocator <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_multiset<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, Hash, Pred, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Hash <span class='operator'>=</span> hash<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Pred <span class='operator'>=</span> equal_to<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>, <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    unordered_multiset<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>, <span class='keyword'>typename</span> <i ><span class='texttt'>see below</span></i><span class='operator'>::</span>size_type <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>,
                       Hash <span class='operator'>=</span> Hash<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, Pred <span class='operator'>=</span> Pred<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, Allocator <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_multiset<span class='anglebracket'>&lt;</span>T, Hash, Pred, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    unordered_multiset<span class='parenthesis'>(</span>InputIterator, InputIterator, <span class='keyword'>typename</span> <i ><span class='texttt'>see below</span></i><span class='operator'>::</span>size_type, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_multiset<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>,
                            hash<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
                            equal_to<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
                            Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Hash, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    unordered_multiset<span class='parenthesis'>(</span>InputIterator, InputIterator, <span class='keyword'>typename</span> <i ><span class='texttt'>see below</span></i><span class='operator'>::</span>size_type,
                       Hash, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_multiset<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>, Hash,
                            equal_to<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
                            Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range_____________________________'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    unordered_multiset<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, <span class='keyword'>typename</span> <i ><span class='texttt'>see below</span></i><span class='operator'>::</span>size_type, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_multiset<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, hash<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
                            equal_to<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range______________________________'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    unordered_multiset<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_multiset<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, hash<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
                            equal_to<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range_______________________________'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R, <span class='keyword'>class</span> Hash, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    unordered_multiset<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, <span class='keyword'>typename</span> <i ><span class='texttt'>see below</span></i><span class='operator'>::</span>size_type, Hash, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_multiset<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, Hash, equal_to<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
                            Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    unordered_multiset<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>, <span class='keyword'>typename</span> <i ><span class='texttt'>see below</span></i><span class='operator'>::</span>size_type, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_multiset<span class='anglebracket'>&lt;</span>T, hash<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>, equal_to<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Hash, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    unordered_multiset<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>, <span class='keyword'>typename</span> <i ><span class='texttt'>see below</span></i><span class='operator'>::</span>size_type, Hash, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> unordered_multiset<span class='anglebracket'>&lt;</span>T, Hash, equal_to<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>}</span>
</span></span></div></div><div class='para' id='unord.multiset.overview-4'><div class='marginalizedparent'><a class='marginalized' href='#unord.multiset.overview-4'>4</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L14150'>#</a></div><div class='texpara'><div id='unord.multiset.overview-4.sentence-1' class='sentence'>A <span class='texttt'>size_<span class='shy'></span>type</span> parameter type in an <span class='texttt'>unordered_<span class='shy'></span>multiset</span> deduction guide
refers to the <span class='texttt'>size_<span class='shy'></span>type</span> member type of
the type deduced by the deduction guide<a class='hidden_link' href='#unord.multiset.overview-4.sentence-1'>.</a></div></div></div></div><div id='unord.multiset.cnstr' class='section'><h4 ><a class='secnum' href='#unord.multiset.cnstr' style='min-width:95pt'>24.5.7.2</a> Constructors <a class='abbr_ref' href='unord.multiset.cnstr'>[unord.multiset.cnstr]</a></h4><div class='texpara'><div id='lib:unordered_multiset,constructor_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:unordered_multiset,constructor_'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> unordered_multiset<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>:</span> unordered_multiset<span class='parenthesis'>(</span>size_type<span class='parenthesis'>(</span><i ><span class='texttt'>see below</span></i><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
<span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> unordered_multiset<span class='parenthesis'>(</span>size_type n,
                            <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf <span class='operator'>=</span> hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                            <span class='keyword'>const</span> key_equal<span class='operator'>&amp;</span> eql <span class='operator'>=</span> key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                            <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a <span class='operator'>=</span> allocator_type<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='unord.multiset.cnstr-1'><div class='marginalizedparent'><a class='marginalized' href='#unord.multiset.cnstr-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L14167'>#</a></div><div class='texpara'><div id='unord.multiset.cnstr-1.sentence-1' class='sentence'><i >Effects</i>: Constructs an empty <span class='texttt'>unordered_<span class='shy'></span>multiset</span> using the
specified hash function, key equality predicate, and allocator, and
using at least <span class='texttt'>n</span> buckets<a class='hidden_link' href='#unord.multiset.cnstr-1.sentence-1'>.</a></div> <div id='unord.multiset.cnstr-1.sentence-2' class='sentence'>For the default constructor,
the number of buckets is <a class='index' id=':default_number_of_buckets_in_unordered_multiset'></a>implementation-defined<a class='hidden_link' href='#unord.multiset.cnstr-1.sentence-2'>.</a></div> <div id='unord.multiset.cnstr-1.sentence-3' class='sentence'><span class='texttt'>max_<span class='shy'></span>load_<span class='shy'></span>factor<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> returns <span class='texttt'><span class='literal'>1.0</span></span><a class='hidden_link' href='#unord.multiset.cnstr-1.sentence-3'>.</a></div></div></div></div><div class='para' id='unord.multiset.cnstr-2'><div class='marginalizedparent'><a class='marginalized' href='#unord.multiset.cnstr-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L14176'>#</a></div><div class='texpara'><div id='unord.multiset.cnstr-2.sentence-1' class='sentence'><i >Complexity</i>: Constant<a class='hidden_link' href='#unord.multiset.cnstr-2.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:unordered_multiset,constructor__'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:unordered_multiset,constructor__'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> unordered_multiset<span class='parenthesis'>(</span>InputIterator f, InputIterator l,
                     size_type n <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>,
                     <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf <span class='operator'>=</span> hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                     <span class='keyword'>const</span> key_equal<span class='operator'>&amp;</span> eql <span class='operator'>=</span> key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                     <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a <span class='operator'>=</span> allocator_type<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range___________________________________________________________________________________'><span class='texttt'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> unordered_multiset<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg,
                     size_type n <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>,
                     <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf <span class='operator'>=</span> hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                     <span class='keyword'>const</span> key_equal<span class='operator'>&amp;</span> eql <span class='operator'>=</span> key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                     <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a <span class='operator'>=</span> allocator_type<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
<span class="keyword added">constexpr</span> unordered_multiset<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il,
                   size_type n <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>,
                   <span class='keyword'>const</span> hasher<span class='operator'>&amp;</span> hf <span class='operator'>=</span> hasher<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                   <span class='keyword'>const</span> key_equal<span class='operator'>&amp;</span> eql <span class='operator'>=</span> key_equal<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
                   <span class='keyword'>const</span> allocator_type<span class='operator'>&amp;</span> a <span class='operator'>=</span> allocator_type<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='unord.multiset.cnstr-3'><div class='marginalizedparent'><a class='marginalized' href='#unord.multiset.cnstr-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L14203'>#</a></div><div class='texpara'><div id='unord.multiset.cnstr-3.sentence-1' class='sentence'><i >Effects</i>: Constructs an empty <span class='texttt'>unordered_<span class='shy'></span>multiset</span> using the
specified hash function, key equality predicate, and allocator, and
using at least <span class='texttt'>n</span> buckets<a class='hidden_link' href='#unord.multiset.cnstr-3.sentence-1'>.</a></div> <div id='unord.multiset.cnstr-3.sentence-2' class='sentence'>If <span class='texttt'>n</span> is not
provided, the number of buckets is <a class='index' id=':default_number_of_buckets_in_unordered_multiset_'></a>implementation-defined<a class='hidden_link' href='#unord.multiset.cnstr-3.sentence-2'>.</a></div> <div id='unord.multiset.cnstr-3.sentence-3' class='sentence'>Then
inserts elements from the range [<span class='texttt'>f, l</span>), <span class='texttt'>rg</span>, or <span class='texttt'>il</span>,
respectively<a class='hidden_link' href='#unord.multiset.cnstr-3.sentence-3'>.</a></div> <div id='unord.multiset.cnstr-3.sentence-4' class='sentence'><span class='texttt'>max_<span class='shy'></span>load_<span class='shy'></span>factor<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> returns <span class='texttt'><span class='literal'>1.0</span></span><a class='hidden_link' href='#unord.multiset.cnstr-3.sentence-4'>.</a></div></div></div></div><div class='para' id='unord.multiset.cnstr-4'><div class='marginalizedparent'><a class='marginalized' href='#unord.multiset.cnstr-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L14214'>#</a></div><div class='texpara'><div id='unord.multiset.cnstr-4.sentence-1' class='sentence'><i >Complexity</i>: Average case linear, worst case quadratic<a class='hidden_link' href='#unord.multiset.cnstr-4.sentence-1'>.</a></div></div></div></div></div><div id='unord.multiset.erasure' class='section'><h4 ><a class='secnum' href='#unord.multiset.erasure' style='min-width:95pt'>24.5.7.3</a> Erasure <a class='abbr_ref' href='unord.multiset.erasure'>[unord.multiset.erasure]</a></h4><div class='texpara'><div id='lib:unordered_multiset,erase_if'><div id='lib:erase_if,unordered_multiset'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:erase_if,unordered_multiset'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K, <span class='keyword'>class</span> H, <span class='keyword'>class</span> P, <span class='keyword'>class</span> A, <span class='keyword'>class</span> Predicate<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>typename</span> unordered_multiset<span class='anglebracket'>&lt;</span>K, H, P, A<span class='anglebracket'>&gt;</span><span class='operator'>::</span>size_type
    erase_if<span class='parenthesis'>(</span>unordered_multiset<span class='anglebracket'>&lt;</span>K, H, P, A<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> c, Predicate pred<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='unord.multiset.erasure-1'><div class='marginalizedparent'><a class='marginalized' href='#unord.multiset.erasure-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L14229'>#</a></div><div class='texpara'><div id='unord.multiset.erasure-1.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>auto</span> original_size <span class='operator'>=</span> c<span class='operator'>.</span>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
<span class='keyword'>for</span> <span class='parenthesis'>(</span><span class='keyword'>auto</span> i <span class='operator'>=</span> c<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, last <span class='operator'>=</span> c<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>; i <span class='operator'>!</span><span class='operator'>=</span> last; <span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
  <span class='keyword'>if</span> <span class='parenthesis'>(</span>pred<span class='parenthesis'>(</span><span class='operator'>*</span>i<span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
    i <span class='operator'>=</span> c<span class='operator'>.</span>erase<span class='parenthesis'>(</span>i<span class='parenthesis'>)</span>;
  <span class='curlybracket'>}</span> <span class='keyword'>else</span> <span class='curlybracket'>{</span>
    <span class='operator'>+</span><span class='operator'>+</span>i;
  <span class='curlybracket'>}</span>
<span class='curlybracket'>}</span>
<span class='keyword'>return</span> original_size <span class='operator'>-</span> c<span class='operator'>.</span>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
</span></div></div></div></div></div></div></div><div id='container.adaptors' class='section'><h2 ><a class='secnum' href='#container.adaptors' style='min-width:65pt'>24.6</a> Container adaptors <a class='abbr_ref' href='container.adaptors'>[container.adaptors]</a></h2><div id='container.adaptors.general' class='section'><h3 ><a class='secnum' href='#container.adaptors.general' style='min-width:80pt'>24.6.1</a> General <a class='abbr_ref' href='container.adaptors.general'>[container.adaptors.general]</a></h3><div class='para' id='container.adaptors.general-1'><div class='marginalizedparent'><a class='marginalized' href='#container.adaptors.general-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L14249'>#</a></div><div class='texpara'><div id='container.adaptors.general-1.sentence-1' class='sentence'>The headers
<a href='#header:%3cqueue%3e' title='24.6.2&emsp;Header &lt;queue&gt; synopsis&emsp;[queue.syn]'><span id='headerref:<queue>'><span class='texttt'>&lt;queue&gt;</span></span></a>,
<a href='#header:%3cstack%3e' title='24.6.3&emsp;Header &lt;stack&gt; synopsis&emsp;[stack.syn]'><span id='headerref:<stack>'><span class='texttt'>&lt;stack&gt;</span></span></a>,
<a href='#header:%3cflat_map%3e' title='24.6.4&emsp;Header &lt;flat_&shy;map&gt; synopsis&emsp;[flat.map.syn]'><span id='headerref:<flat_map>'><span class='texttt'>&lt;flat_<span class='shy'></span>map&gt;</span></span></a>,
and <a href='#header:%3cflat_set%3e' title='24.6.5&emsp;Header &lt;flat_&shy;set&gt; synopsis&emsp;[flat.set.syn]'><span id='headerref:<flat_set>'><span class='texttt'>&lt;flat_<span class='shy'></span>set&gt;</span></span></a>
define the container adaptors
<span class='texttt'>queue</span> and <span class='texttt'>priority_<span class='shy'></span>queue</span>,
<span class='texttt'>stack</span>,
<span class='texttt'>flat_<span class='shy'></span>map</span> and <span class='texttt'>flat_<span class='shy'></span>multimap</span>,
and <span class='texttt'>flat_<span class='shy'></span>set</span> and <span class='texttt'>flat_<span class='shy'></span>multiset</span>,
respectively<a class='hidden_link' href='#container.adaptors.general-1.sentence-1'>.</a></div></div></div><div class='para' id='container.adaptors.general-2'><div class='marginalizedparent'><a class='marginalized' href='#container.adaptors.general-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L14262'>#</a></div><div class='texpara'><div id='container.adaptors.general-2.sentence-1' class='sentence'>Each container adaptor takes
one or more template parameters
named <span class='texttt'>Container</span>, <span class='texttt'>KeyContainer</span>, or <span class='texttt'>MappedContainer</span>
that denote the types of containers that the container adaptor adapts<a class='hidden_link' href='#container.adaptors.general-2.sentence-1'>.</a></div> <div id='container.adaptors.general-2.sentence-2' class='sentence'>Each container adaptor has at least one constructor
that takes a reference argument to one or more such template parameters<a class='hidden_link' href='#container.adaptors.general-2.sentence-2'>.</a></div> <div id='container.adaptors.general-2.sentence-3' class='sentence'>For each constructor reference argument to a container <span class='texttt'>C</span>,
the constructor copies the container into the container adaptor<a class='hidden_link' href='#container.adaptors.general-2.sentence-3'>.</a></div> <div id='container.adaptors.general-2.sentence-4' class='sentence'>If <span class='texttt'>C</span> takes an allocator, then a compatible allocator may be passed in
to the adaptor's constructor<a class='hidden_link' href='#container.adaptors.general-2.sentence-4'>.</a></div> <div id='container.adaptors.general-2.sentence-5' class='sentence'>Otherwise, normal copy or move construction is used for the container
argument<a class='hidden_link' href='#container.adaptors.general-2.sentence-5'>.</a></div> <div id='container.adaptors.general-2.sentence-6' class='sentence'>For the container adaptors
that take a single container template parameter <span class='texttt'>Container</span>,
the first template parameter <span class='texttt'>T</span> of the container adaptor
shall denote the same type as <span class='texttt'>Container<span class='operator'>&#x200b;::&#x200b;</span>value_<span class='shy'></span>type</span><a class='hidden_link' href='#container.adaptors.general-2.sentence-6'>.</a></div></div></div><div class='para' id='container.adaptors.general-3'><div class='marginalizedparent'><a class='marginalized' href='#container.adaptors.general-3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L14279'>#</a></div><div class='texpara'><div id='container.adaptors.general-3.sentence-1' class='sentence'>For container adaptors, no <span class='texttt'>swap</span> function throws an exception unless that
exception is thrown by the swap of the adaptor's
<span class='texttt'>Container</span>,
<span class='texttt'>KeyContainer</span>,
<span class='texttt'>MappedContainer</span>, or
<span class='texttt'>Compare</span> object (if any)<a class='hidden_link' href='#container.adaptors.general-3.sentence-1'>.</a></div></div></div><div class='para' id='container.adaptors.general-4'><div class='marginalizedparent'><a class='marginalized' href='#container.adaptors.general-4'>4</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L14287'>#</a></div><div class='texpara'><div id='container.adaptors.general-4.sentence-1' class='sentence'>A constructor template of a container adaptor
shall not participate in overload resolution
if it has an <span class='texttt'>InputIterator</span> template parameter and
a type that does not qualify as an input iterator is deduced for that parameter<a class='hidden_link' href='#container.adaptors.general-4.sentence-1'>.</a></div></div></div><div class='para' id='container.adaptors.general-5'><div class='marginalizedparent'><a class='marginalized' href='#container.adaptors.general-5'>5</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L14293'>#</a></div><div class='texpara'><div id='container.adaptors.general-5.sentence-1' class='sentence'>For container adaptors that have them,
the <span class='texttt'>insert</span>, <span class='texttt'>emplace</span>, and <span class='texttt'>erase</span> members
affect the validity of iterators, references, and pointers
to the adaptor's container(s) in the same way that
the containers' respective
<span class='texttt'>insert</span>, <span class='texttt'>emplace</span>, and <span class='texttt'>erase</span> members do<a class='hidden_link' href='#container.adaptors.general-5.sentence-1'>.</a></div> <div id='container.adaptors.general-example-1' class='example'><div class='texpara'>[<i>Example&nbsp;<a href='#container.adaptors.general-example-1'>1</a></i>:&ensp;<div id='container.adaptors.general-5.sentence-2' class='sentence'>A call to <span class='texttt'>flat_<span class='shy'></span>map<span class='anglebracket'>&lt;</span>Key, T<span class='anglebracket'>&gt;</span><span class='operator'>&#x200b;::&#x200b;</span>insert</span>
can invalidate all iterators to the <span class='texttt'>flat_<span class='shy'></span>map</span><a class='hidden_link' href='#container.adaptors.general-5.sentence-2'>.</a></div> —&nbsp;<i>end example</i>]</div></div></div></div><div class='para' id='container.adaptors.general-6'><div class='marginalizedparent'><a class='marginalized' href='#container.adaptors.general-6'>6</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L14305'>#</a></div><div class='texpara'><div id='container.adaptors.general-6.sentence-1' class='sentence'>A deduction guide for a container adaptor shall not participate in overload resolution if any of the following are true:
<ul class='itemize'><li id='container.adaptors.general-6.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#container.adaptors.general-6.1'>(6.1)</a></div><div class='texpara'><div id='container.adaptors.general-6.1.sentence-1' class='sentence'>It has an <span class='texttt'>InputIterator</span> template parameter and a type that does not qualify as an input iterator is deduced for that parameter<a class='hidden_link' href='#container.adaptors.general-6.1.sentence-1'>.</a></div></div></li><li id='container.adaptors.general-6.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#container.adaptors.general-6.2'>(6.2)</a></div><div class='texpara'><div id='container.adaptors.general-6.2.sentence-1' class='sentence'>It has a <span class='texttt'>Compare</span> template parameter and a type that qualifies as an allocator is deduced for that parameter<a class='hidden_link' href='#container.adaptors.general-6.2.sentence-1'>.</a></div></div></li><li id='container.adaptors.general-6.3'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#container.adaptors.general-6.3'>(6.3)</a></div><div class='texpara'><div id='container.adaptors.general-6.3.sentence-1' class='sentence'>It has a <span class='texttt'>Container</span>, <span class='texttt'>KeyContainer</span>, or <span class='texttt'>MappedContainer</span> template parameter and a type that qualifies as an allocator is deduced for that parameter<a class='hidden_link' href='#container.adaptors.general-6.3.sentence-1'>.</a></div></div></li><li id='container.adaptors.general-6.4'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#container.adaptors.general-6.4'>(6.4)</a></div><div class='texpara'><div id='container.adaptors.general-6.4.sentence-1' class='sentence'>It has no <span class='texttt'>Container</span>, <span class='texttt'>KeyContainer</span>, or <span class='texttt'>MappedContainer</span> template parameter, and it has an <span class='texttt'>Allocator</span> template parameter, and a type that does not qualify as an allocator is deduced for that parameter<a class='hidden_link' href='#container.adaptors.general-6.4.sentence-1'>.</a></div></div></li><li id='container.adaptors.general-6.5'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#container.adaptors.general-6.5'>(6.5)</a></div><div class='texpara'><div id='container.adaptors.general-6.5.sentence-1' class='sentence'>It has both <span class='texttt'>Container</span> and <span class='texttt'>Allocator</span> template parameters, and <span class='texttt'>uses_<span class='shy'></span>allocator_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>Container, Allocator<span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>false</span></span><a class='hidden_link' href='#container.adaptors.general-6.5.sentence-1'>.</a></div></div></li><li id='container.adaptors.general-6.6'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#container.adaptors.general-6.6'>(6.6)</a></div><div class='texpara'><div id='container.adaptors.general-6.6.sentence-1' class='sentence'>It has both <span class='texttt'>KeyContainer</span> and <span class='texttt'>Allocator</span> template parameters, and
<span class='texttt'>uses_<span class='shy'></span>allocator_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>KeyContainer, Allocator<span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>false</span></span><a class='hidden_link' href='#container.adaptors.general-6.6.sentence-1'>.</a></div></div></li><li id='container.adaptors.general-6.7'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#container.adaptors.general-6.7'>(6.7)</a></div><div class='texpara'><div id='container.adaptors.general-6.7.sentence-1' class='sentence'>It has both <span class='texttt'>KeyContainer</span> and <span class='texttt'>Compare</span> template parameters, and
<span class='codeblock'>is_invocable_v<span class='anglebracket'>&lt;</span><span class='keyword'>const</span> Compare<span class='operator'>&amp;</span>,
              <span class='keyword'>const</span> <span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>value_type<span class='operator'>&amp;</span>,
              <span class='keyword'>const</span> <span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>value_type<span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span>
</span>
is not a valid expression or is <span class='texttt'><span class='literal'>false</span></span><a class='hidden_link' href='#container.adaptors.general-6.7.sentence-1'>.</a></div></div></li><li id='container.adaptors.general-6.8'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#container.adaptors.general-6.8'>(6.8)</a></div><div class='texpara'><div id='container.adaptors.general-6.8.sentence-1' class='sentence'>It has both <span class='texttt'>MappedContainer</span> and <span class='texttt'>Allocator</span> template parameters, and
<span class='texttt'>uses_<span class='shy'></span>allocator_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>MappedContainer, Allocator<span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>false</span></span><a class='hidden_link' href='#container.adaptors.general-6.8.sentence-1'>.</a></div></div></li></ul></div></div></div><div class='para' id='container.adaptors.general-7'><div class='marginalizedparent'><a class='marginalized' href='#container.adaptors.general-7'>7</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L14326'>#</a></div><div class='texpara'><div id='container.adaptors.general-7.sentence-1' class='sentence'>The exposition-only alias template <span class='texttt'><i >iter-value-type</i></span>
defined in <a href='#sequences.general' title='24.3.1&emsp;General'>[sequences.<span class='shy'></span>general]</a> and
the exposition-only alias templates <span class='texttt'><i >iter-key-type</i></span>, <span class='texttt'><i >iter-mapped-type</i></span>,
<span class='texttt'><i >range-key-type</i></span>, and <span class='texttt'><i >range-mapped-type</i></span>
defined in <a href='#associative.general' title='24.4.1&emsp;General'>[associative.<span class='shy'></span>general]</a>
may appear in deduction guides for container adaptors<a class='hidden_link' href='#container.adaptors.general-7.sentence-1'>.</a></div></div></div><div class='para' id='container.adaptors.general-8'><div class='marginalizedparent'><a class='marginalized' href='#container.adaptors.general-8'>8</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L14334'>#</a></div><div class='texpara'><div id='container.adaptors.general-8.sentence-1' class='sentence'>The following exposition-only alias template
may appear in deduction guides for container adaptors:
<span class='codeblock'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Allocator, <span class='keyword'>class</span> T<span class='anglebracket'>&gt;</span>
  <span class='keyword'>using</span> <i >alloc-rebind</i> <span class='operator'>=</span>                      <span class='comment'>// <i >exposition only</i></span>
    <span class='keyword'>typename</span> allocator_traits<span class='anglebracket'>&lt;</span>Allocator<span class='anglebracket'>&gt;</span><span class='operator'>::</span><span class='keyword'>template</span> rebind_alloc<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
</span></div></div></div></div><div id='queue.syn' class='section'><h3 ><a class='secnum' href='#queue.syn' style='min-width:80pt'>24.6.2</a> Header <span class='texttt'>&lt;queue&gt;</span> synopsis <a class='abbr_ref' href='queue.syn'>[queue.syn]</a></h3><div class='texpara'><span id='header:<queue>'><div class='marginalizedparent'><a class='itemDeclLink' href='#header:%3cqueue%3e'>🔗</a></div><span class='codeblock'><span class='preprocessordirective'>#include</span> <span class='anglebracket'>&lt;</span>compare<span class='anglebracket'>&gt;</span>              <span class='comment'>// see <a href='compare.syn' title='17.11.1&emsp;Header &lt;compare&gt; synopsis'>[compare.<span class='shy'></span>syn]</a></span>
<span class='preprocessordirective'>#include</span> <span class='anglebracket'>&lt;</span>initializer_list<span class='anglebracket'>&gt;</span>     <span class='comment'>// see <a href='initializer.list.syn' title='17.10.2&emsp;Header &lt;initializer_&shy;list&gt; synopsis'>[initializer.<span class='shy'></span>list.<span class='shy'></span>syn]</a></span>

<span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='comment'>// <a href='#queue' title='24.6.6&emsp;Class template queue'>[queue]</a>, class template <span class='tcode_in_codeblock'>queue</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Container <span class='operator'>=</span> deque<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span> <span class='keyword'>class</span> queue;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Container<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> queue<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x, <span class='keyword'>const</span> queue<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Container<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>!</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> queue<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x, <span class='keyword'>const</span> queue<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Container<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span> <span class='parenthesis'>(</span><span class='keyword'>const</span> queue<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x, <span class='keyword'>const</span> queue<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Container<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='anglebracket'>&gt;</span> <span class='parenthesis'>(</span><span class='keyword'>const</span> queue<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x, <span class='keyword'>const</span> queue<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Container<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> queue<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x, <span class='keyword'>const</span> queue<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Container<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='anglebracket'>&gt;</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> queue<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x, <span class='keyword'>const</span> queue<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <a href='cmp.concept#concept:three_way_comparable' title='17.11.4&emsp;Concept three_&shy;way_&shy;comparable&emsp;[cmp.concept]'><span id='conceptref:three_way_comparable_'><span class='tcode_in_codeblock'>three_<span class='shy'></span>way_<span class='shy'></span>comparable</span></span></a> Container<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr</span> compare_three_way_result_t<span class='anglebracket'>&lt;</span>Container<span class='anglebracket'>&gt;</span>
      <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='operator'>=</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='keyword'>const</span> queue<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x, <span class='keyword'>const</span> queue<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Container<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> swap<span class='parenthesis'>(</span>queue<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x, queue<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span> <span class='keyword'>noexcept</span><span class='parenthesis'>(</span><span class='keyword'>noexcept</span><span class='parenthesis'>(</span>x<span class='operator'>.</span>swap<span class='parenthesis'>(</span>y<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Container, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
    <span class='keyword'>struct</span> uses_allocator<span class='anglebracket'>&lt;</span>queue<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span>, Alloc<span class='anglebracket'>&gt;</span>;

  <span class='comment'>// <a href='#container.adaptors.format' title='24.6.13&emsp;Container adaptors formatting'>[container.<span class='shy'></span>adaptors.<span class='shy'></span>format]</a>, formatter specialization for <span class='tcode_in_codeblock'>queue</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> T, <a href='format.formattable#concept:formattable' title='22.14.6.3&emsp;Concept formattable&emsp;[format.formattable]'><span id='conceptref:formattable'><span class='tcode_in_codeblock'>formattable</span></span></a><span class='anglebracket'>&lt;</span>charT<span class='anglebracket'>&gt;</span> Container<span class='anglebracket'>&gt;</span>
    <span class='keyword'>struct</span> formatter<span class='anglebracket'>&lt;</span>queue<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span>, charT<span class='anglebracket'>&gt;</span>;

  <span class='comment'>// <a href='#priority.queue' title='24.6.7&emsp;Class template priority_&shy;queue'>[priority.<span class='shy'></span>queue]</a>, class template <span class='tcode_in_codeblock'>priority_<span class='shy'></span>queue</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Container <span class='operator'>=</span> vector<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Container<span class='operator'>::</span>value_type<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    <span class='keyword'>class</span> priority_queue;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Container, <span class='keyword'>class</span> Compare<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> swap<span class='parenthesis'>(</span>priority_queue<span class='anglebracket'>&lt;</span>T, Container, Compare<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x,
              priority_queue<span class='anglebracket'>&lt;</span>T, Container, Compare<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span> <span class='keyword'>noexcept</span><span class='parenthesis'>(</span><span class='keyword'>noexcept</span><span class='parenthesis'>(</span>x<span class='operator'>.</span>swap<span class='parenthesis'>(</span>y<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Container, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
    <span class='keyword'>struct</span> uses_allocator<span class='anglebracket'>&lt;</span>priority_queue<span class='anglebracket'>&lt;</span>T, Container, Compare<span class='anglebracket'>&gt;</span>, Alloc<span class='anglebracket'>&gt;</span>;

  <span class='comment'>// <a href='#container.adaptors.format' title='24.6.13&emsp;Container adaptors formatting'>[container.<span class='shy'></span>adaptors.<span class='shy'></span>format]</a>, formatter specialization for <span class='tcode_in_codeblock'>priority_<span class='shy'></span>queue</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> T, <a href='format.formattable#concept:formattable' title='22.14.6.3&emsp;Concept formattable&emsp;[format.formattable]'><span id='conceptref:formattable_'><span class='tcode_in_codeblock'>formattable</span></span></a><span class='anglebracket'>&lt;</span>charT<span class='anglebracket'>&gt;</span> Container, <span class='keyword'>class</span> Compare<span class='anglebracket'>&gt;</span>
    <span class='keyword'>struct</span> formatter<span class='anglebracket'>&lt;</span>priority_queue<span class='anglebracket'>&lt;</span>T, Container, Compare<span class='anglebracket'>&gt;</span>, charT<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>}</span>
</span></span></div></div><div id='stack.syn' class='section'><h3 ><a class='secnum' href='#stack.syn' style='min-width:80pt'>24.6.3</a> Header <span class='texttt'>&lt;stack&gt;</span> synopsis <a class='abbr_ref' href='stack.syn'>[stack.syn]</a></h3><div class='texpara'><span id='header:<stack>'><div class='marginalizedparent'><a class='itemDeclLink' href='#header:%3cstack%3e'>🔗</a></div><span class='codeblock'><span class='preprocessordirective'>#include</span> <span class='anglebracket'>&lt;</span>compare<span class='anglebracket'>&gt;</span>              <span class='comment'>// see <a href='compare.syn' title='17.11.1&emsp;Header &lt;compare&gt; synopsis'>[compare.<span class='shy'></span>syn]</a></span>
<span class='preprocessordirective'>#include</span> <span class='anglebracket'>&lt;</span>initializer_list<span class='anglebracket'>&gt;</span>     <span class='comment'>// see <a href='initializer.list.syn' title='17.10.2&emsp;Header &lt;initializer_&shy;list&gt; synopsis'>[initializer.<span class='shy'></span>list.<span class='shy'></span>syn]</a></span>

<span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='comment'>// <a href='#stack' title='24.6.8&emsp;Class template stack'>[stack]</a>, class template <span class='tcode_in_codeblock'>stack</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Container <span class='operator'>=</span> deque<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span> <span class='keyword'>class</span> stack;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Container<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> stack<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x, <span class='keyword'>const</span> stack<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Container<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>!</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> stack<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x, <span class='keyword'>const</span> stack<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Container<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span> <span class='parenthesis'>(</span><span class='keyword'>const</span> stack<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x, <span class='keyword'>const</span> stack<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Container<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='anglebracket'>&gt;</span> <span class='parenthesis'>(</span><span class='keyword'>const</span> stack<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x, <span class='keyword'>const</span> stack<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Container<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> stack<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x, <span class='keyword'>const</span> stack<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Container<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='anglebracket'>&gt;</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> stack<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x, <span class='keyword'>const</span> stack<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <a href='cmp.concept#concept:three_way_comparable' title='17.11.4&emsp;Concept three_&shy;way_&shy;comparable&emsp;[cmp.concept]'><span id='conceptref:three_way_comparable__'><span class='tcode_in_codeblock'>three_<span class='shy'></span>way_<span class='shy'></span>comparable</span></span></a> Container<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr</span> compare_three_way_result_t<span class='anglebracket'>&lt;</span>Container<span class='anglebracket'>&gt;</span>
      <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='operator'>=</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='keyword'>const</span> stack<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x, <span class='keyword'>const</span> stack<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Container<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> swap<span class='parenthesis'>(</span>stack<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x, stack<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span> <span class='keyword'>noexcept</span><span class='parenthesis'>(</span><span class='keyword'>noexcept</span><span class='parenthesis'>(</span>x<span class='operator'>.</span>swap<span class='parenthesis'>(</span>y<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Container, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
    <span class='keyword'>struct</span> uses_allocator<span class='anglebracket'>&lt;</span>stack<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span>, Alloc<span class='anglebracket'>&gt;</span>;

  <span class='comment'>// <a href='#container.adaptors.format' title='24.6.13&emsp;Container adaptors formatting'>[container.<span class='shy'></span>adaptors.<span class='shy'></span>format]</a>, formatter specialization for <span class='tcode_in_codeblock'>stack</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> charT, <span class='keyword'>class</span> T, <a href='format.formattable#concept:formattable' title='22.14.6.3&emsp;Concept formattable&emsp;[format.formattable]'><span id='conceptref:formattable__'><span class='tcode_in_codeblock'>formattable</span></span></a><span class='anglebracket'>&lt;</span>charT<span class='anglebracket'>&gt;</span> Container<span class='anglebracket'>&gt;</span>
    <span class='keyword'>struct</span> formatter<span class='anglebracket'>&lt;</span>stack<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span>, charT<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>}</span>
</span></span></div></div><div id='flat.map.syn' class='section'><h3 ><a class='secnum' href='#flat.map.syn' style='min-width:80pt'>24.6.4</a> Header <span class='texttt'>&lt;flat_<span class='shy'></span>map&gt;</span> synopsis <a class='abbr_ref' href='flat.map.syn'>[flat.map.syn]</a></h3><div class='texpara'><span id='header:<flat_map>'><div class='marginalizedparent'><a class='itemDeclLink' href='#header:%3cflat_map%3e'>🔗</a></div><span class='codeblock'><span class='preprocessordirective'>#include</span> <span class='anglebracket'>&lt;</span>compare<span class='anglebracket'>&gt;</span>              <span class='comment'>// see <a href='compare.syn' title='17.11.1&emsp;Header &lt;compare&gt; synopsis'>[compare.<span class='shy'></span>syn]</a></span>
<span class='preprocessordirective'>#include</span> <span class='anglebracket'>&lt;</span>initializer_list<span class='anglebracket'>&gt;</span>     <span class='comment'>// see <a href='initializer.list.syn' title='17.10.2&emsp;Header &lt;initializer_&shy;list&gt; synopsis'>[initializer.<span class='shy'></span>list.<span class='shy'></span>syn]</a></span>

<span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='comment'>// <a href='#flat.map' title='24.6.9&emsp;Class template flat_&shy;map'>[flat.<span class='shy'></span>map]</a>, class template <span class='tcode_in_codeblock'>flat_<span class='shy'></span>map</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> KeyContainer <span class='operator'>=</span> vector<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>, <span class='keyword'>class</span> MappedContainer <span class='operator'>=</span> vector<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    <span class='keyword'>class</span> flat_map;

  <span class='keyword'>struct</span> sorted_unique_t <span class='curlybracket'>{</span> <span class='keyword'>explicit</span> sorted_unique_t<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>default</span>; <span class='curlybracket'>}</span>;
  <span class='keyword'>inline</span> <span class='keyword'>constexpr</span> sorted_unique_t sorted_unique<span class='curlybracket'>{</span><span class='curlybracket'>}</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> KeyContainer, <span class='keyword'>class</span> MappedContainer,
           <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    <span class='keyword'>struct</span> uses_allocator<span class='anglebracket'>&lt;</span>flat_map<span class='anglebracket'>&lt;</span>Key, T, Compare, KeyContainer, MappedContainer<span class='anglebracket'>&gt;</span>,
                          Allocator<span class='anglebracket'>&gt;</span>;

  <span class='comment'>// <a href='#flat.map.erasure' title='24.6.9.8&emsp;Erasure'>[flat.<span class='shy'></span>map.<span class='shy'></span>erasure]</a>, erasure for <span class='tcode_in_codeblock'>flat_<span class='shy'></span>map</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> KeyContainer, <span class='keyword'>class</span> MappedContainer,
           <span class='keyword'>class</span> Predicate<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>typename</span> flat_map<span class='anglebracket'>&lt;</span>Key, T, Compare, KeyContainer, MappedContainer<span class='anglebracket'>&gt;</span><span class='operator'>::</span>size_type
      erase_if<span class='parenthesis'>(</span>flat_map<span class='anglebracket'>&lt;</span>Key, T, Compare, KeyContainer, MappedContainer<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> c, Predicate pred<span class='parenthesis'>)</span>;

  <span class='comment'>// <a href='#flat.multimap' title='24.6.10&emsp;Class template flat_&shy;multimap'>[flat.<span class='shy'></span>multimap]</a>, class template <span class='tcode_in_codeblock'>flat_<span class='shy'></span>multimap</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> KeyContainer <span class='operator'>=</span> vector<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>, <span class='keyword'>class</span> MappedContainer <span class='operator'>=</span> vector<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    <span class='keyword'>class</span> flat_multimap;

  <span class='keyword'>struct</span> sorted_equivalent_t <span class='curlybracket'>{</span> <span class='keyword'>explicit</span> sorted_equivalent_t<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>default</span>; <span class='curlybracket'>}</span>;
  <span class='keyword'>inline</span> <span class='keyword'>constexpr</span> sorted_equivalent_t sorted_equivalent<span class='curlybracket'>{</span><span class='curlybracket'>}</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> KeyContainer, <span class='keyword'>class</span> MappedContainer,
           <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    <span class='keyword'>struct</span> uses_allocator<span class='anglebracket'>&lt;</span>flat_multimap<span class='anglebracket'>&lt;</span>Key, T, Compare, KeyContainer, MappedContainer<span class='anglebracket'>&gt;</span>,
                          Allocator<span class='anglebracket'>&gt;</span>;

  <span class='comment'>// <a href='#flat.multimap.erasure' title='24.6.10.5&emsp;Erasure'>[flat.<span class='shy'></span>multimap.<span class='shy'></span>erasure]</a>, erasure for <span class='tcode_in_codeblock'>flat_<span class='shy'></span>multimap</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> KeyContainer, <span class='keyword'>class</span> MappedContainer,
           <span class='keyword'>class</span> Predicate<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>typename</span> flat_multimap<span class='anglebracket'>&lt;</span>Key, T, Compare, KeyContainer, MappedContainer<span class='anglebracket'>&gt;</span><span class='operator'>::</span>size_type
      erase_if<span class='parenthesis'>(</span>flat_multimap<span class='anglebracket'>&lt;</span>Key, T, Compare, KeyContainer, MappedContainer<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> c, Predicate pred<span class='parenthesis'>)</span>;
<span class='curlybracket'>}</span>
</span></span></div></div><div id='flat.set.syn' class='section'><h3 ><a class='secnum' href='#flat.set.syn' style='min-width:80pt'>24.6.5</a> Header <span class='texttt'>&lt;flat_<span class='shy'></span>set&gt;</span> synopsis <a class='abbr_ref' href='flat.set.syn'>[flat.set.syn]</a></h3><div class='texpara'><a class='index' id='header:<flat_set>'></a>
<span class='codeblock'><span class='preprocessordirective'>#include</span> <span class='anglebracket'>&lt;</span>compare<span class='anglebracket'>&gt;</span>              <span class='comment'>// see <a href='compare.syn' title='17.11.1&emsp;Header &lt;compare&gt; synopsis'>[compare.<span class='shy'></span>syn]</a></span>
<span class='preprocessordirective'>#include</span> <span class='anglebracket'>&lt;</span>initializer_list<span class='anglebracket'>&gt;</span>     <span class='comment'>// see <a href='initializer.list.syn' title='17.10.2&emsp;Header &lt;initializer_&shy;list&gt; synopsis'>[initializer.<span class='shy'></span>list.<span class='shy'></span>syn]</a></span>

<span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='comment'>// <a href='#flat.set' title='24.6.11&emsp;Class template flat_&shy;set'>[flat.<span class='shy'></span>set]</a>, class template <span class='tcode_in_codeblock'>flat_<span class='shy'></span>set</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>, <span class='keyword'>class</span> KeyContainer <span class='operator'>=</span> vector<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    <span class='keyword'>class</span> flat_set;

  <span class='keyword'>struct</span> sorted_unique_t <span class='curlybracket'>{</span> <span class='keyword'>explicit</span> sorted_unique_t<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>default</span>; <span class='curlybracket'>}</span>;
  <span class='keyword'>inline</span> <span class='keyword'>constexpr</span> sorted_unique_t sorted_unique<span class='curlybracket'>{</span><span class='curlybracket'>}</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> KeyContainer, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    <span class='keyword'>struct</span> uses_allocator<span class='anglebracket'>&lt;</span>flat_set<span class='anglebracket'>&lt;</span>Key, Compare, KeyContainer<span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='comment'>// <a href='#flat.set.erasure' title='24.6.11.6&emsp;Erasure'>[flat.<span class='shy'></span>set.<span class='shy'></span>erasure]</a>, erasure for <span class='tcode_in_codeblock'>flat_<span class='shy'></span>set</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> KeyContainer, <span class='keyword'>class</span> Predicate<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>typename</span> flat_set<span class='anglebracket'>&lt;</span>Key, Compare, KeyContainer<span class='anglebracket'>&gt;</span><span class='operator'>::</span>size_type
      erase_if<span class='parenthesis'>(</span>flat_set<span class='anglebracket'>&lt;</span>Key, Compare, KeyContainer<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> c, Predicate pred<span class='parenthesis'>)</span>;

  <span class='comment'>// <a href='#flat.multiset' title='24.6.12&emsp;Class template flat_&shy;multiset'>[flat.<span class='shy'></span>multiset]</a>, class template <span class='tcode_in_codeblock'>flat_<span class='shy'></span>multiset</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>, <span class='keyword'>class</span> KeyContainer <span class='operator'>=</span> vector<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    <span class='keyword'>class</span> flat_multiset;

  <span class='keyword'>struct</span> sorted_equivalent_t <span class='curlybracket'>{</span> <span class='keyword'>explicit</span> sorted_equivalent_t<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>default</span>; <span class='curlybracket'>}</span>;
  <span class='keyword'>inline</span> <span class='keyword'>constexpr</span> sorted_equivalent_t sorted_equivalent<span class='curlybracket'>{</span><span class='curlybracket'>}</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> KeyContainer, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    <span class='keyword'>struct</span> uses_allocator<span class='anglebracket'>&lt;</span>flat_multiset<span class='anglebracket'>&lt;</span>Key, Compare, KeyContainer<span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>;

  <span class='comment'>// <a href='#flat.multiset.erasure' title='24.6.12.6&emsp;Erasure'>[flat.<span class='shy'></span>multiset.<span class='shy'></span>erasure]</a>, erasure for <span class='tcode_in_codeblock'>flat_<span class='shy'></span>multiset</span></span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> KeyContainer, <span class='keyword'>class</span> Predicate<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>typename</span> flat_multiset<span class='anglebracket'>&lt;</span>Key, Compare, KeyContainer<span class='anglebracket'>&gt;</span><span class='operator'>::</span>size_type
      erase_if<span class='parenthesis'>(</span>flat_multiset<span class='anglebracket'>&lt;</span>Key, Compare, KeyContainer<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> c, Predicate pred<span class='parenthesis'>)</span>;
<span class='curlybracket'>}</span>
</span></div></div><div id='queue' class='section'><h3 ><a class='secnum' href='#queue' style='min-width:80pt'>24.6.6</a> Class template <span class='texttt'>queue</span> <a class='abbr_ref' href='queue'>[queue]</a></h3><div id='queue.defn' class='section'><h4 ><a class='secnum' href='#queue.defn' style='min-width:95pt'>24.6.6.1</a> Definition <a class='abbr_ref' href='queue.defn'>[queue.defn]</a></h4><div class='para' id='queue.defn-1'><div class='marginalizedparent'><a class='marginalized' href='#queue.defn-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L14526'>#</a></div><div class='texpara'><div id='queue.defn-1.sentence-1' class='sentence'><a class='index' id='lib:queue'></a>Any sequence container supporting operations
<span class='texttt'>front<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>,
<span class='texttt'>back<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>,
<span class='texttt'>push_<span class='shy'></span>back<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>
and
<span class='texttt'>pop_<span class='shy'></span>front<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>
can be used to instantiate
<span class='texttt'>queue</span><a class='hidden_link' href='#queue.defn-1.sentence-1'>.</a></div> <div id='queue.defn-1.sentence-2' class='sentence'>In particular,
<a href='#list' title='24.3.11&emsp;Class template list&emsp;[list]'><span class='texttt'>list</span></a>
and
<a href='#deque' title='24.3.9&emsp;Class template deque&emsp;[deque]'><span class='texttt'>deque</span></a>
can be used<a class='hidden_link' href='#queue.defn-1.sentence-2'>.</a></div></div><div class='texpara'><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Container <span class='operator'>=</span> deque<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> queue <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='keyword'>using</span> value_type      <span class='operator'>=</span> <span class='keyword'>typename</span> Container<span class='operator'>::</span>value_type;
    <span class='keyword'>using</span> reference       <span class='operator'>=</span> <span class='keyword'>typename</span> Container<span class='operator'>::</span>reference;
    <span class='keyword'>using</span> const_reference <span class='operator'>=</span> <span class='keyword'>typename</span> Container<span class='operator'>::</span>const_reference;
    <span class='keyword'>using</span> size_type       <span class='operator'>=</span> <span class='keyword'>typename</span> Container<span class='operator'>::</span>size_type;
    <span class='keyword'>using</span> container_type  <span class='operator'>=</span>          Container;

  <span class='keyword'>protected</span><span class='operator'>:</span>
    Container c;

  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class="keyword added">constexpr</span> queue<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>:</span> queue<span class='parenthesis'>(</span>Container<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> queue<span class='parenthesis'>(</span><span class='keyword'>const</span> Container<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> queue<span class='parenthesis'>(</span>Container<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> queue<span class='parenthesis'>(</span>InputIterator first, InputIterator last<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range____________________________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> queue<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span> <span class='keyword'>explicit</span> <span class="keyword added">constexpr</span> queue<span class='parenthesis'>(</span><span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> queue<span class='parenthesis'>(</span><span class='keyword'>const</span> Container<span class='operator'>&amp;</span>, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> queue<span class='parenthesis'>(</span>Container<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> queue<span class='parenthesis'>(</span><span class='keyword'>const</span> queue<span class='operator'>&amp;</span>, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> queue<span class='parenthesis'>(</span>queue<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> queue<span class='parenthesis'>(</span>InputIterator first, InputIterator last, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range_____________________________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> queue<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> <span class='keyword'>bool</span>              empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>     <span class='curlybracket'>{</span> <span class='keyword'>return</span> c<span class='operator'>.</span>empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> size_type         size<span class='parenthesis'>(</span><span class='parenthesis'>)</span>  <span class='keyword'>const</span>     <span class='curlybracket'>{</span> <span class='keyword'>return</span> c<span class='operator'>.</span>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> reference         front<span class='parenthesis'>(</span><span class='parenthesis'>)</span>           <span class='curlybracket'>{</span> <span class='keyword'>return</span> c<span class='operator'>.</span>front<span class='parenthesis'>(</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> const_reference   front<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>     <span class='curlybracket'>{</span> <span class='keyword'>return</span> c<span class='operator'>.</span>front<span class='parenthesis'>(</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> reference         back<span class='parenthesis'>(</span><span class='parenthesis'>)</span>            <span class='curlybracket'>{</span> <span class='keyword'>return</span> c<span class='operator'>.</span>back<span class='parenthesis'>(</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> const_reference   back<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>      <span class='curlybracket'>{</span> <span class='keyword'>return</span> c<span class='operator'>.</span>back<span class='parenthesis'>(</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> push<span class='parenthesis'>(</span><span class='keyword'>const</span> value_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>      <span class='curlybracket'>{</span> c<span class='operator'>.</span>push_back<span class='parenthesis'>(</span>x<span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> push<span class='parenthesis'>(</span>value_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>           <span class='curlybracket'>{</span> c<span class='operator'>.</span>push_back<span class='parenthesis'>(</span>std<span class='operator'>::</span>move<span class='parenthesis'>(</span>x<span class='parenthesis'>)</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range______________________________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> <span class='keyword'>void</span> push_range<span class='parenthesis'>(</span>R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>)</span> emplace<span class='parenthesis'>(</span>Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>
        <span class='curlybracket'>{</span> <span class='keyword'>return</span> c<span class='operator'>.</span>emplace_back<span class='parenthesis'>(</span>std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>Args<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>args<span class='parenthesis'>)</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> pop<span class='parenthesis'>(</span><span class='parenthesis'>)</span>                          <span class='curlybracket'>{</span> c<span class='operator'>.</span>pop_front<span class='parenthesis'>(</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> swap<span class='parenthesis'>(</span>queue<span class='operator'>&amp;</span> q<span class='parenthesis'>)</span> <span class='keyword'>noexcept</span><span class='parenthesis'>(</span>is_nothrow_swappable_v<span class='anglebracket'>&lt;</span>Container<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>
      <span class='curlybracket'>{</span> <span class='keyword'>using</span> std<span class='operator'>::</span>swap; swap<span class='parenthesis'>(</span>c, q<span class='operator'>.</span>c<span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
  <span class='curlybracket'>}</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Container<span class='anglebracket'>&gt;</span>
    queue<span class='parenthesis'>(</span>Container<span class='parenthesis'>)</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> queue<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Container<span class='operator'>::</span>value_type, Container<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
    queue<span class='parenthesis'>(</span>InputIterator, InputIterator<span class='parenthesis'>)</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> queue<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range________________________________'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R<span class='anglebracket'>&gt;</span>
    queue<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> queue<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Container, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    queue<span class='parenthesis'>(</span>Container, Allocator<span class='parenthesis'>)</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> queue<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Container<span class='operator'>::</span>value_type, Container<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    queue<span class='parenthesis'>(</span>InputIterator, InputIterator, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> queue<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>, deque<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>,
               Allocator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range_________________________________'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    queue<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> queue<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, deque<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Container, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
    <span class='keyword'>struct</span> uses_allocator<span class='anglebracket'>&lt;</span>queue<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span>, Alloc<span class='anglebracket'>&gt;</span>
      <span class='operator'>:</span> uses_allocator<span class='anglebracket'>&lt;</span>Container, Alloc<span class='anglebracket'>&gt;</span><span class='operator'>::</span>type <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></div></div></div><div id='queue.cons' class='section'><h4 ><a class='secnum' href='#queue.cons' style='min-width:95pt'>24.6.6.2</a> Constructors <a class='abbr_ref' href='queue.cons'>[queue.cons]</a></h4><div class='texpara'><div id='lib:queue,constructor'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:queue,constructor'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> queue<span class='parenthesis'>(</span><span class='keyword'>const</span> Container<span class='operator'>&amp;</span> cont<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='queue.cons-1'><div class='marginalizedparent'><a class='marginalized' href='#queue.cons-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L14624'>#</a></div><div class='texpara'><div id='queue.cons-1.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'>c</span> with <span class='texttt'>cont</span><a class='hidden_link' href='#queue.cons-1.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:queue,constructor_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:queue,constructor_'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> queue<span class='parenthesis'>(</span>Container<span class='operator'>&amp;</span><span class='operator'>&amp;</span> cont<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='queue.cons-2'><div class='marginalizedparent'><a class='marginalized' href='#queue.cons-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L14635'>#</a></div><div class='texpara'><div id='queue.cons-2.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'>c</span> with <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>move<span class='parenthesis'>(</span>cont<span class='parenthesis'>)</span></span><a class='hidden_link' href='#queue.cons-2.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:queue,constructor__'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:queue,constructor__'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> queue<span class='parenthesis'>(</span>InputIterator first, InputIterator last<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='queue.cons-3'><div class='marginalizedparent'><a class='marginalized' href='#queue.cons-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L14647'>#</a></div><div class='texpara'><div id='queue.cons-3.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'>c</span> with
<span class='texttt'>first</span> as the first argument and <span class='texttt'>last</span> as the second argument<a class='hidden_link' href='#queue.cons-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:queue,constructor___'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:queue,constructor___'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range_______________________________________________________________________________________'><span class='texttt'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> queue<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='queue.cons-4'><div class='marginalizedparent'><a class='marginalized' href='#queue.cons-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L14660'>#</a></div><div class='texpara'><div id='queue.cons-4.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'>c</span> with <span class='texttt'>ranges<span class='operator'>&#x200b;::&#x200b;</span>to<span class='anglebracket'>&lt;</span>Container<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>rg<span class='parenthesis'>)</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#queue.cons-4.sentence-1'>.</a></div></div></div></div></div><div id='queue.cons.alloc' class='section'><h4 ><a class='secnum' href='#queue.cons.alloc' style='min-width:95pt'>24.6.6.3</a> Constructors with allocators <a class='abbr_ref' href='queue.cons.alloc'>[queue.cons.alloc]</a></h4><div class='para' id='queue.cons.alloc-1'><div class='marginalizedparent'><a class='marginalized' href='#queue.cons.alloc-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L14667'>#</a></div><div class='texpara'><div id='queue.cons.alloc-1.sentence-1' class='sentence'>If <span class='texttt'>uses_<span class='shy'></span>allocator_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>container_<span class='shy'></span>type, Alloc<span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>false</span></span>
the constructors in this subclause shall not participate in overload resolution<a class='hidden_link' href='#queue.cons.alloc-1.sentence-1'>.</a></div></div></div><div class='texpara'><div id='lib:queue,constructor____'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:queue,constructor____'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> queue<span class='parenthesis'>(</span><span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='queue.cons.alloc-2'><div class='marginalizedparent'><a class='marginalized' href='#queue.cons.alloc-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L14677'>#</a></div><div class='texpara'><div id='queue.cons.alloc-2.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'>c</span> with <span class='texttt'>a</span><a class='hidden_link' href='#queue.cons.alloc-2.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:queue,constructor_____'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:queue,constructor_____'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> queue<span class='parenthesis'>(</span><span class='keyword'>const</span> container_type<span class='operator'>&amp;</span> cont, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='queue.cons.alloc-3'><div class='marginalizedparent'><a class='marginalized' href='#queue.cons.alloc-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L14688'>#</a></div><div class='texpara'><div id='queue.cons.alloc-3.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'>c</span> with <span class='texttt'>cont</span> as the first argument and <span class='texttt'>a</span>
as the second argument<a class='hidden_link' href='#queue.cons.alloc-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:queue,constructor______'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:queue,constructor______'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> queue<span class='parenthesis'>(</span>container_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> cont, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='queue.cons.alloc-4'><div class='marginalizedparent'><a class='marginalized' href='#queue.cons.alloc-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L14700'>#</a></div><div class='texpara'><div id='queue.cons.alloc-4.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'>c</span> with <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>move<span class='parenthesis'>(</span>cont<span class='parenthesis'>)</span></span> as the first argument and <span class='texttt'>a</span>
as the second argument<a class='hidden_link' href='#queue.cons.alloc-4.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:queue,constructor_______'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:queue,constructor_______'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> queue<span class='parenthesis'>(</span><span class='keyword'>const</span> queue<span class='operator'>&amp;</span> q, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='queue.cons.alloc-5'><div class='marginalizedparent'><a class='marginalized' href='#queue.cons.alloc-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L14712'>#</a></div><div class='texpara'><div id='queue.cons.alloc-5.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'>c</span> with <span class='texttt'>q<span class='operator'>.</span>c</span> as the first argument and <span class='texttt'>a</span> as the
second argument<a class='hidden_link' href='#queue.cons.alloc-5.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:queue,constructor________'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:queue,constructor________'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> queue<span class='parenthesis'>(</span>queue<span class='operator'>&amp;</span><span class='operator'>&amp;</span> q, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='queue.cons.alloc-6'><div class='marginalizedparent'><a class='marginalized' href='#queue.cons.alloc-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L14724'>#</a></div><div class='texpara'><div id='queue.cons.alloc-6.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'>c</span> with <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>move<span class='parenthesis'>(</span>q<span class='operator'>.</span>c<span class='parenthesis'>)</span></span> as the first argument and <span class='texttt'>a</span>
as the second argument<a class='hidden_link' href='#queue.cons.alloc-6.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:queue,constructor_________'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:queue,constructor_________'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> queue<span class='parenthesis'>(</span>InputIterator first, InputIterator last, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> alloc<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='queue.cons.alloc-7'><div class='marginalizedparent'><a class='marginalized' href='#queue.cons.alloc-7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L14737'>#</a></div><div class='texpara'><div id='queue.cons.alloc-7.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'>c</span> with
<span class='texttt'>first</span> as the first argument,
<span class='texttt'>last</span> as the second argument, and
<span class='texttt'>alloc</span> as the third argument<a class='hidden_link' href='#queue.cons.alloc-7.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:queue,constructor__________'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:queue,constructor__________'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range________________________________________________________________________________________'><span class='texttt'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> queue<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='queue.cons.alloc-8'><div class='marginalizedparent'><a class='marginalized' href='#queue.cons.alloc-8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L14752'>#</a></div><div class='texpara'><div id='queue.cons.alloc-8.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'>c</span> with
<span class='texttt'>ranges<span class='operator'>&#x200b;::&#x200b;</span>to<span class='anglebracket'>&lt;</span>Container<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>rg<span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span></span><a class='hidden_link' href='#queue.cons.alloc-8.sentence-1'>.</a></div></div></div></div></div><div id='queue.mod' class='section'><h4 ><a class='secnum' href='#queue.mod' style='min-width:95pt'>24.6.6.4</a> Modifiers <a class='abbr_ref' href='queue.mod'>[queue.mod]</a></h4><div class='texpara'><div id='lib:queue,push_range'><div id='lib:push_range,queue'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:push_range,queue'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range_________________________________________________________________________________________'><span class='texttt'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>void</span> push_range<span class='parenthesis'>(</span>R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='queue.mod-1'><div class='marginalizedparent'><a class='marginalized' href='#queue.mod-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L14767'>#</a></div><div class='texpara'><div id='queue.mod-1.sentence-1' class='sentence'><i >Effects</i>: Equivalent to <span class='texttt'>c<span class='operator'>.</span>append_<span class='shy'></span>range<span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>rg<span class='parenthesis'>)</span><span class='parenthesis'>)</span></span>
if that is a valid expression,
otherwise <span class='texttt'>ranges<span class='operator'>&#x200b;::&#x200b;</span>copy<span class='parenthesis'>(</span>rg, back_<span class='shy'></span>inserter<span class='parenthesis'>(</span>c<span class='parenthesis'>)</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#queue.mod-1.sentence-1'>.</a></div></div></div></div></div><div id='queue.ops' class='section'><h4 ><a class='secnum' href='#queue.ops' style='min-width:95pt'>24.6.6.5</a> Operators <a class='abbr_ref' href='queue.ops'>[queue.ops]</a></h4><div class='texpara'><div id='lib:queue,operator=='><div id='lib:operator==,queue'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator==,queue'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Container<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> queue<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x, <span class='keyword'>const</span> queue<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='queue.ops-1'><div class='marginalizedparent'><a class='marginalized' href='#queue.ops-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L14783'>#</a></div><div class='texpara'><div id='queue.ops-1.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>x<span class='operator'>.</span>c <span class='operator'>=</span><span class='operator'>=</span> y<span class='operator'>.</span>c</span><a class='hidden_link' href='#queue.ops-1.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:operator!=,queue'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator!=,queue'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Container<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>!</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> queue<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x,  <span class='keyword'>const</span> queue<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='queue.ops-2'><div class='marginalizedparent'><a class='marginalized' href='#queue.ops-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L14795'>#</a></div><div class='texpara'><div id='queue.ops-2.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>x<span class='operator'>.</span>c <span class='operator'>!</span><span class='operator'>=</span> y<span class='operator'>.</span>c</span><a class='hidden_link' href='#queue.ops-2.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:queue,operator<'><div id='lib:operator<,queue'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator%3c,queue'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Container<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span> <span class='parenthesis'>(</span><span class='keyword'>const</span> queue<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x, <span class='keyword'>const</span> queue<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='queue.ops-3'><div class='marginalizedparent'><a class='marginalized' href='#queue.ops-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L14807'>#</a></div><div class='texpara'><div id='queue.ops-3.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>x<span class='operator'>.</span>c <span class='anglebracket'>&lt;</span> y<span class='operator'>.</span>c</span><a class='hidden_link' href='#queue.ops-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:queue,operator>'><div id='lib:operator>,queue'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator%3e,queue'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Container<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='anglebracket'>&gt;</span> <span class='parenthesis'>(</span><span class='keyword'>const</span> queue<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x, <span class='keyword'>const</span> queue<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='queue.ops-4'><div class='marginalizedparent'><a class='marginalized' href='#queue.ops-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L14819'>#</a></div><div class='texpara'><div id='queue.ops-4.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>x<span class='operator'>.</span>c <span class='anglebracket'>&gt;</span> y<span class='operator'>.</span>c</span><a class='hidden_link' href='#queue.ops-4.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:queue,operator<='><div id='lib:operator<=,queue'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator%3c=,queue'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Container<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> queue<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x, <span class='keyword'>const</span> queue<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='queue.ops-5'><div class='marginalizedparent'><a class='marginalized' href='#queue.ops-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L14831'>#</a></div><div class='texpara'><div id='queue.ops-5.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>x<span class='operator'>.</span>c <span class='anglebracket'>&lt;</span><span class='operator'>=</span> y<span class='operator'>.</span>c</span><a class='hidden_link' href='#queue.ops-5.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:queue,operator>='><div id='lib:operator>=,queue'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator%3e=,queue'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Container<span class='anglebracket'>&gt;</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='anglebracket'>&gt;</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> queue<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x,
                    <span class='keyword'>const</span> queue<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='queue.ops-6'><div class='marginalizedparent'><a class='marginalized' href='#queue.ops-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L14844'>#</a></div><div class='texpara'><div id='queue.ops-6.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>x<span class='operator'>.</span>c <span class='anglebracket'>&gt;</span><span class='operator'>=</span> y<span class='operator'>.</span>c</span><a class='hidden_link' href='#queue.ops-6.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:queue,operator<=>'><div id='lib:operator<=>,queue'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator%3c=%3e,queue'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <a href='cmp.concept#concept:three_way_comparable' title='17.11.4&emsp;Concept three_&shy;way_&shy;comparable&emsp;[cmp.concept]'><span id='conceptref:three_way_comparable___'><span class='texttt'>three_<span class='shy'></span>way_<span class='shy'></span>comparable</span></span></a> Container<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> compare_three_way_result_t<span class='anglebracket'>&lt;</span>Container<span class='anglebracket'>&gt;</span>
    <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='operator'>=</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='keyword'>const</span> queue<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x, <span class='keyword'>const</span> queue<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='queue.ops-7'><div class='marginalizedparent'><a class='marginalized' href='#queue.ops-7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L14857'>#</a></div><div class='texpara'><div id='queue.ops-7.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>x<span class='operator'>.</span>c <span class='anglebracket'>&lt;</span><span class='operator'>=</span><span class='anglebracket'>&gt;</span> y<span class='operator'>.</span>c</span><a class='hidden_link' href='#queue.ops-7.sentence-1'>.</a></div></div></div></div></div><div id='queue.special' class='section'><h4 ><a class='secnum' href='#queue.special' style='min-width:95pt'>24.6.6.6</a> Specialized algorithms <a class='abbr_ref' href='queue.special'>[queue.special]</a></h4><div class='texpara'><div id='lib:queue,swap'><div id='lib:swap,queue'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:swap,queue'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Container<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>void</span> swap<span class='parenthesis'>(</span>queue<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x, queue<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span> <span class='keyword'>noexcept</span><span class='parenthesis'>(</span><span class='keyword'>noexcept</span><span class='parenthesis'>(</span>x<span class='operator'>.</span>swap<span class='parenthesis'>(</span>y<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='queue.special-1'><div class='marginalizedparent'><a class='marginalized' href='#queue.special-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L14871'>#</a></div><div class='texpara'><div id='queue.special-1.sentence-1' class='sentence'><i >Constraints</i>: <span class='texttt'>is_<span class='shy'></span>swappable_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>Container<span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#queue.special-1.sentence-1'>.</a></div></div></div></div><div class='para' id='queue.special-2'><div class='marginalizedparent'><a class='marginalized' href='#queue.special-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L14875'>#</a></div><div class='texpara'><div id='queue.special-2.sentence-1' class='sentence'><i >Effects</i>: As if by <span class='texttt'>x<span class='operator'>.</span>swap<span class='parenthesis'>(</span>y<span class='parenthesis'>)</span></span><a class='hidden_link' href='#queue.special-2.sentence-1'>.</a></div></div></div></div></div></div><div id='priority.queue' class='section'><h3 ><a class='secnum' href='#priority.queue' style='min-width:80pt'>24.6.7</a> Class template <span class='texttt'>priority_<span class='shy'></span>queue</span> <a class='abbr_ref' href='priority.queue'>[priority.queue]</a></h3><div id='priqueue.overview' class='section'><h4 ><a class='secnum' href='#priqueue.overview' style='min-width:95pt'>24.6.7.1</a> Overview <a class='abbr_ref' href='priqueue.overview'>[priqueue.overview]</a></h4><div class='para' id='priqueue.overview-1'><div class='marginalizedparent'><a class='marginalized' href='#priqueue.overview-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L14884'>#</a></div><div class='texpara'><div id='priqueue.overview-1.sentence-1' class='sentence'><a class='index' id='lib:priority_queue'></a>Any sequence container with random access iterator and supporting operations
<span class='texttt'>front<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>,
<span class='texttt'>push_<span class='shy'></span>back<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>
and
<span class='texttt'>pop_<span class='shy'></span>back<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>
can be used to instantiate
<span class='texttt'>priority_<span class='shy'></span>queue</span><a class='hidden_link' href='#priqueue.overview-1.sentence-1'>.</a></div> <div id='priqueue.overview-1.sentence-2' class='sentence'>In particular,
<a href='#vector' title='24.3.12&emsp;Class template vector&emsp;[vector]'><span class='texttt'>vector</span></a>
and
<a href='#deque' title='24.3.9&emsp;Class template deque&emsp;[deque]'><span class='texttt'>deque</span></a>
can be used<a class='hidden_link' href='#priqueue.overview-1.sentence-2'>.</a></div> <div id='priqueue.overview-1.sentence-3' class='sentence'>Instantiating
<span class='texttt'>priority_<span class='shy'></span>queue</span>
also involves supplying a function or function object for making
priority comparisons; the library assumes that the function or function
object defines a <a href='alg.sorting' title='27.8&emsp;Sorting and related operations&emsp;[alg.sorting]'>strict weak ordering</a><a class='hidden_link' href='#priqueue.overview-1.sentence-3'>.</a></div></div><div class='texpara'><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Container <span class='operator'>=</span> vector<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Container<span class='operator'>::</span>value_type<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> priority_queue <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='keyword'>using</span> value_type      <span class='operator'>=</span> <span class='keyword'>typename</span> Container<span class='operator'>::</span>value_type;
    <span class='keyword'>using</span> reference       <span class='operator'>=</span> <span class='keyword'>typename</span> Container<span class='operator'>::</span>reference;
    <span class='keyword'>using</span> const_reference <span class='operator'>=</span> <span class='keyword'>typename</span> Container<span class='operator'>::</span>const_reference;
    <span class='keyword'>using</span> size_type       <span class='operator'>=</span> <span class='keyword'>typename</span> Container<span class='operator'>::</span>size_type;
    <span class='keyword'>using</span> container_type  <span class='operator'>=</span> Container;
    <span class='keyword'>using</span> value_compare   <span class='operator'>=</span> Compare;

  <span class='keyword'>protected</span><span class='operator'>:</span>
    Container c;
    Compare comp;

  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class="keyword added">constexpr</span> priority_queue<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>:</span> priority_queue<span class='parenthesis'>(</span>Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> priority_queue<span class='parenthesis'>(</span><span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='operator'>:</span> priority_queue<span class='parenthesis'>(</span>x, Container<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> priority_queue<span class='parenthesis'>(</span><span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> x, <span class='keyword'>const</span> Container<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> priority_queue<span class='parenthesis'>(</span><span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> x, Container<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> priority_queue<span class='parenthesis'>(</span>InputIterator first, InputIterator last, <span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> x <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> priority_queue<span class='parenthesis'>(</span>InputIterator first, InputIterator last, <span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> x,
                     <span class='keyword'>const</span> Container<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> priority_queue<span class='parenthesis'>(</span>InputIterator first, InputIterator last, <span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> x,
                     Container<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range__________________________________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> priority_queue<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> x <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> priority_queue<span class='parenthesis'>(</span><span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> priority_queue<span class='parenthesis'>(</span><span class='keyword'>const</span> Compare<span class='operator'>&amp;</span>, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> priority_queue<span class='parenthesis'>(</span><span class='keyword'>const</span> Compare<span class='operator'>&amp;</span>, <span class='keyword'>const</span> Container<span class='operator'>&amp;</span>, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> priority_queue<span class='parenthesis'>(</span><span class='keyword'>const</span> Compare<span class='operator'>&amp;</span>, Container<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> priority_queue<span class='parenthesis'>(</span><span class='keyword'>const</span> priority_queue<span class='operator'>&amp;</span>, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> priority_queue<span class='parenthesis'>(</span>priority_queue<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> priority_queue<span class='parenthesis'>(</span>InputIterator, InputIterator, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> priority_queue<span class='parenthesis'>(</span>InputIterator, InputIterator, <span class='keyword'>const</span> Compare<span class='operator'>&amp;</span>, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> priority_queue<span class='parenthesis'>(</span>InputIterator, InputIterator, <span class='keyword'>const</span> Compare<span class='operator'>&amp;</span>, <span class='keyword'>const</span> Container<span class='operator'>&amp;</span>,
                     <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> priority_queue<span class='parenthesis'>(</span>InputIterator, InputIterator, <span class='keyword'>const</span> Compare<span class='operator'>&amp;</span>, Container<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range___________________________________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> priority_queue<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> Compare<span class='operator'>&amp;</span>, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range____________________________________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> priority_queue<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> <span class='keyword'>bool</span>            empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='curlybracket'>{</span> <span class='keyword'>return</span> c<span class='operator'>.</span>empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> size_type       size<span class='parenthesis'>(</span><span class='parenthesis'>)</span>  <span class='keyword'>const</span> <span class='curlybracket'>{</span> <span class='keyword'>return</span> c<span class='operator'>.</span>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> const_reference top<span class='parenthesis'>(</span><span class='parenthesis'>)</span>   <span class='keyword'>const</span> <span class='curlybracket'>{</span> <span class='keyword'>return</span> c<span class='operator'>.</span>front<span class='parenthesis'>(</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> push<span class='parenthesis'>(</span><span class='keyword'>const</span> value_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> push<span class='parenthesis'>(</span>value_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range_____________________________________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> push_range<span class='parenthesis'>(</span>R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> <span class='keyword'>void</span> emplace<span class='parenthesis'>(</span>Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> pop<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> swap<span class='parenthesis'>(</span>priority_queue<span class='operator'>&amp;</span> q<span class='parenthesis'>)</span> <span class='keyword'>noexcept</span><span class='parenthesis'>(</span>is_nothrow_swappable_v<span class='anglebracket'>&lt;</span>Container<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
                                          is_nothrow_swappable_v<span class='anglebracket'>&lt;</span>Compare<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>
      <span class='curlybracket'>{</span> <span class='keyword'>using</span> std<span class='operator'>::</span>swap; swap<span class='parenthesis'>(</span>c, q<span class='operator'>.</span>c<span class='parenthesis'>)</span>; swap<span class='parenthesis'>(</span>comp, q<span class='operator'>.</span>comp<span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
  <span class='curlybracket'>}</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Compare, <span class='keyword'>class</span> Container<span class='anglebracket'>&gt;</span>
    priority_queue<span class='parenthesis'>(</span>Compare, Container<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> priority_queue<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Container<span class='operator'>::</span>value_type, Container, Compare<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator,
           <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Container <span class='operator'>=</span> vector<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    priority_queue<span class='parenthesis'>(</span>InputIterator, InputIterator, Compare <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, Container <span class='operator'>=</span> Container<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> priority_queue<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>, Container, Compare<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range__________________________________'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    priority_queue<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, Compare <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> priority_queue<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, vector<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>, Compare<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Compare, <span class='keyword'>class</span> Container, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    priority_queue<span class='parenthesis'>(</span>Compare, Container, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> priority_queue<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Container<span class='operator'>::</span>value_type, Container, Compare<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    priority_queue<span class='parenthesis'>(</span>InputIterator, InputIterator, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> priority_queue<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>,
                        vector<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>,
                        less<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    priority_queue<span class='parenthesis'>(</span>InputIterator, InputIterator, Compare, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> priority_queue<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>,
                        vector<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>, Compare<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> Container, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    priority_queue<span class='parenthesis'>(</span>InputIterator, InputIterator, Compare, Container, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> priority_queue<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Container<span class='operator'>::</span>value_type, Container, Compare<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range___________________________________'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    priority_queue<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, Compare, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> priority_queue<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, vector<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>,
                        Compare<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range____________________________________'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    priority_queue<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> priority_queue<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, vector<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;

  <span class='comment'>// no equality is provided</span>

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Container, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
    <span class='keyword'>struct</span> uses_allocator<span class='anglebracket'>&lt;</span>priority_queue<span class='anglebracket'>&lt;</span>T, Container, Compare<span class='anglebracket'>&gt;</span>, Alloc<span class='anglebracket'>&gt;</span>
      <span class='operator'>:</span> uses_allocator<span class='anglebracket'>&lt;</span>Container, Alloc<span class='anglebracket'>&gt;</span><span class='operator'>::</span>type <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></div></div></div><div id='priqueue.cons' class='section'><h4 ><a class='secnum' href='#priqueue.cons' style='min-width:95pt'>24.6.7.2</a> Constructors <a class='abbr_ref' href='priqueue.cons'>[priqueue.cons]</a></h4><div class='texpara'><div id='lib:priority_queue,constructor'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:priority_queue,constructor'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> priority_queue<span class='parenthesis'>(</span><span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> x, <span class='keyword'>const</span> Container<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;
<span class="keyword added">constexpr</span> priority_queue<span class='parenthesis'>(</span><span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> x, Container<span class='operator'>&amp;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='priqueue.cons-1'><div class='marginalizedparent'><a class='marginalized' href='#priqueue.cons-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15029'>#</a></div><div class='texpara'><div id='priqueue.cons-1.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>x</span> defines a strict weak ordering (<a href='alg.sorting' title='27.8&emsp;Sorting and related operations'>[alg.<span class='shy'></span>sorting]</a>)<a class='hidden_link' href='#priqueue.cons-1.sentence-1'>.</a></div></div></div></div><div class='para' id='priqueue.cons-2'><div class='marginalizedparent'><a class='marginalized' href='#priqueue.cons-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15033'>#</a></div><div class='texpara'><div id='priqueue.cons-2.sentence-1' class='sentence'><i >Effects</i>: Initializes
<span class='texttt'>comp</span> with
<span class='texttt'>x</span> and
<span class='texttt'>c</span> with
<span class='texttt'>y</span> (copy constructing or move constructing as appropriate);
calls
<span class='texttt'>make_<span class='shy'></span>heap<span class='parenthesis'>(</span>c<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, c<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, comp<span class='parenthesis'>)</span></span><a class='hidden_link' href='#priqueue.cons-2.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:priority_queue,constructor_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:priority_queue,constructor_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> priority_queue<span class='parenthesis'>(</span>InputIterator first, InputIterator last, <span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> x <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='priqueue.cons-3'><div class='marginalizedparent'><a class='marginalized' href='#priqueue.cons-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15051'>#</a></div><div class='texpara'><div id='priqueue.cons-3.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>x</span> defines a strict weak ordering (<a href='alg.sorting' title='27.8&emsp;Sorting and related operations'>[alg.<span class='shy'></span>sorting]</a>)<a class='hidden_link' href='#priqueue.cons-3.sentence-1'>.</a></div></div></div></div><div class='para' id='priqueue.cons-4'><div class='marginalizedparent'><a class='marginalized' href='#priqueue.cons-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15055'>#</a></div><div class='texpara'><div id='priqueue.cons-4.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'>c</span> with
<span class='texttt'>first</span> as the first argument and
<span class='texttt'>last</span> as the second argument, and
initializes <span class='texttt'>comp</span> with <span class='texttt'>x</span>;
then calls <span class='texttt'>make_<span class='shy'></span>heap<span class='parenthesis'>(</span>c<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, c<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, comp<span class='parenthesis'>)</span></span><a class='hidden_link' href='#priqueue.cons-4.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:priority_queue,constructor__'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:priority_queue,constructor__'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> priority_queue<span class='parenthesis'>(</span>InputIterator first, InputIterator last, <span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> x, <span class='keyword'>const</span> Container<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> priority_queue<span class='parenthesis'>(</span>InputIterator first, InputIterator last, <span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> x, Container<span class='operator'>&amp;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='priqueue.cons-5'><div class='marginalizedparent'><a class='marginalized' href='#priqueue.cons-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15073'>#</a></div><div class='texpara'><div id='priqueue.cons-5.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>x</span> defines a strict weak ordering (<a href='alg.sorting' title='27.8&emsp;Sorting and related operations'>[alg.<span class='shy'></span>sorting]</a>)<a class='hidden_link' href='#priqueue.cons-5.sentence-1'>.</a></div></div></div></div><div class='para' id='priqueue.cons-6'><div class='marginalizedparent'><a class='marginalized' href='#priqueue.cons-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15077'>#</a></div><div class='texpara'><div id='priqueue.cons-6.sentence-1' class='sentence'><i >Effects</i>: Initializes
<span class='texttt'>comp</span> with
<span class='texttt'>x</span> and
<span class='texttt'>c</span> with
<span class='texttt'>y</span> (copy constructing or move constructing as appropriate);
calls
<span class='texttt'>c<span class='operator'>.</span>insert<span class='parenthesis'>(</span>c<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, first, last<span class='parenthesis'>)</span></span>;
and finally calls
<span class='texttt'>make_<span class='shy'></span>heap<span class='parenthesis'>(</span>c<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, c<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, comp<span class='parenthesis'>)</span></span><a class='hidden_link' href='#priqueue.cons-6.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:priority_queue,constructor___'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:priority_queue,constructor___'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range______________________________________________________________________________________________'><span class='texttt'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> priority_queue<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> x <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='priqueue.cons-7'><div class='marginalizedparent'><a class='marginalized' href='#priqueue.cons-7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15097'>#</a></div><div class='texpara'><div id='priqueue.cons-7.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>x</span> defines a strict weak ordering (<a href='alg.sorting' title='27.8&emsp;Sorting and related operations'>[alg.<span class='shy'></span>sorting]</a>)<a class='hidden_link' href='#priqueue.cons-7.sentence-1'>.</a></div></div></div></div><div class='para' id='priqueue.cons-8'><div class='marginalizedparent'><a class='marginalized' href='#priqueue.cons-8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15101'>#</a></div><div class='texpara'><div id='priqueue.cons-8.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'>comp</span> with <span class='texttt'>x</span> and
<span class='texttt'>c</span> with <span class='texttt'>ranges<span class='operator'>&#x200b;::&#x200b;</span>to<span class='anglebracket'>&lt;</span>Container<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>rg<span class='parenthesis'>)</span><span class='parenthesis'>)</span></span> and
finally calls <span class='texttt'>make_<span class='shy'></span>heap<span class='parenthesis'>(</span>c<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, c<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, comp<span class='parenthesis'>)</span></span><a class='hidden_link' href='#priqueue.cons-8.sentence-1'>.</a></div></div></div></div></div><div id='priqueue.cons.alloc' class='section'><h4 ><a class='secnum' href='#priqueue.cons.alloc' style='min-width:95pt'>24.6.7.3</a> Constructors with allocators <a class='abbr_ref' href='priqueue.cons.alloc'>[priqueue.cons.alloc]</a></h4><div class='para' id='priqueue.cons.alloc-1'><div class='marginalizedparent'><a class='marginalized' href='#priqueue.cons.alloc-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15110'>#</a></div><div class='texpara'><div id='priqueue.cons.alloc-1.sentence-1' class='sentence'>If <span class='texttt'>uses_<span class='shy'></span>allocator_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>container_<span class='shy'></span>type, Alloc<span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>false</span></span>
the constructors in this subclause shall not participate in overload resolution<a class='hidden_link' href='#priqueue.cons.alloc-1.sentence-1'>.</a></div></div></div><div class='texpara'><div id='lib:priority_queue,constructor____'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:priority_queue,constructor____'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> priority_queue<span class='parenthesis'>(</span><span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='priqueue.cons.alloc-2'><div class='marginalizedparent'><a class='marginalized' href='#priqueue.cons.alloc-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15120'>#</a></div><div class='texpara'><div id='priqueue.cons.alloc-2.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'>c</span> with <span class='texttt'>a</span> and value-initializes <span class='texttt'>comp</span><a class='hidden_link' href='#priqueue.cons.alloc-2.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:priority_queue,constructor_____'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:priority_queue,constructor_____'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> priority_queue<span class='parenthesis'>(</span><span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> compare, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='priqueue.cons.alloc-3'><div class='marginalizedparent'><a class='marginalized' href='#priqueue.cons.alloc-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15131'>#</a></div><div class='texpara'><div id='priqueue.cons.alloc-3.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'>c</span> with <span class='texttt'>a</span> and initializes <span class='texttt'>comp</span> with <span class='texttt'>compare</span><a class='hidden_link' href='#priqueue.cons.alloc-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:priority_queue,constructor______'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:priority_queue,constructor______'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> priority_queue<span class='parenthesis'>(</span><span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> compare, <span class='keyword'>const</span> Container<span class='operator'>&amp;</span> cont, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='priqueue.cons.alloc-4'><div class='marginalizedparent'><a class='marginalized' href='#priqueue.cons.alloc-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15143'>#</a></div><div class='texpara'><div id='priqueue.cons.alloc-4.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'>c</span> with <span class='texttt'>cont</span> as the first argument and <span class='texttt'>a</span> as the second
argument, and initializes <span class='texttt'>comp</span> with <span class='texttt'>compare</span>;
calls <span class='texttt'>make_<span class='shy'></span>heap<span class='parenthesis'>(</span>c<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, c<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, comp<span class='parenthesis'>)</span></span><a class='hidden_link' href='#priqueue.cons.alloc-4.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:priority_queue,constructor_______'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:priority_queue,constructor_______'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> priority_queue<span class='parenthesis'>(</span><span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> compare, Container<span class='operator'>&amp;</span><span class='operator'>&amp;</span> cont, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='priqueue.cons.alloc-5'><div class='marginalizedparent'><a class='marginalized' href='#priqueue.cons.alloc-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15157'>#</a></div><div class='texpara'><div id='priqueue.cons.alloc-5.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'>c</span> with <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>move<span class='parenthesis'>(</span>cont<span class='parenthesis'>)</span></span> as the first argument and <span class='texttt'>a</span>
as the second argument, and initializes <span class='texttt'>comp</span> with <span class='texttt'>compare</span>;
calls <span class='texttt'>make_<span class='shy'></span>heap<span class='parenthesis'>(</span>c<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, c<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, comp<span class='parenthesis'>)</span></span><a class='hidden_link' href='#priqueue.cons.alloc-5.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:priority_queue,constructor________'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:priority_queue,constructor________'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> priority_queue<span class='parenthesis'>(</span><span class='keyword'>const</span> priority_queue<span class='operator'>&amp;</span> q, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='priqueue.cons.alloc-6'><div class='marginalizedparent'><a class='marginalized' href='#priqueue.cons.alloc-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15170'>#</a></div><div class='texpara'><div id='priqueue.cons.alloc-6.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'>c</span> with <span class='texttt'>q<span class='operator'>.</span>c</span> as the first argument and <span class='texttt'>a</span> as
the second argument, and initializes <span class='texttt'>comp</span> with <span class='texttt'>q<span class='operator'>.</span>comp</span><a class='hidden_link' href='#priqueue.cons.alloc-6.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:priority_queue,constructor_________'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:priority_queue,constructor_________'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> priority_queue<span class='parenthesis'>(</span>priority_queue<span class='operator'>&amp;</span><span class='operator'>&amp;</span> q, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='priqueue.cons.alloc-7'><div class='marginalizedparent'><a class='marginalized' href='#priqueue.cons.alloc-7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15182'>#</a></div><div class='texpara'><div id='priqueue.cons.alloc-7.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'>c</span> with <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>move<span class='parenthesis'>(</span>q<span class='operator'>.</span>c<span class='parenthesis'>)</span></span> as the first argument and <span class='texttt'>a</span>
as the second argument, and initializes <span class='texttt'>comp</span> with <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>move<span class='parenthesis'>(</span>q<span class='operator'>.</span>comp<span class='parenthesis'>)</span></span><a class='hidden_link' href='#priqueue.cons.alloc-7.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:priority_queue,constructor__________'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:priority_queue,constructor__________'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> priority_queue<span class='parenthesis'>(</span>InputIterator first, InputIterator last, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='priqueue.cons.alloc-8'><div class='marginalizedparent'><a class='marginalized' href='#priqueue.cons.alloc-8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15195'>#</a></div><div class='texpara'><div id='priqueue.cons.alloc-8.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'>c</span> with
<span class='texttt'>first</span> as the first argument,
<span class='texttt'>last</span> as the second argument, and
<span class='texttt'>a</span> as the third argument, and
value-initializes <span class='texttt'>comp</span>;
calls <span class='texttt'>make_<span class='shy'></span>heap<span class='parenthesis'>(</span>c<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, c<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, comp<span class='parenthesis'>)</span></span><a class='hidden_link' href='#priqueue.cons.alloc-8.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:priority_queue,constructor___________'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:priority_queue,constructor___________'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> priority_queue<span class='parenthesis'>(</span>InputIterator first, InputIterator last, <span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> compare, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='priqueue.cons.alloc-9'><div class='marginalizedparent'><a class='marginalized' href='#priqueue.cons.alloc-9'>9</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15212'>#</a></div><div class='texpara'><div id='priqueue.cons.alloc-9.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'>c</span> with
<span class='texttt'>first</span> as the first argument,
<span class='texttt'>last</span> as the second argument, and
<span class='texttt'>a</span> as the third argument, and
initializes <span class='texttt'>comp</span> with <span class='texttt'>compare</span>;
calls <span class='texttt'>make_<span class='shy'></span>heap<span class='parenthesis'>(</span>c<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, c<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, comp<span class='parenthesis'>)</span></span><a class='hidden_link' href='#priqueue.cons.alloc-9.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:priority_queue,constructor____________'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:priority_queue,constructor____________'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> priority_queue<span class='parenthesis'>(</span>InputIterator first, InputIterator last, <span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> compare,
                 <span class='keyword'>const</span> Container<span class='operator'>&amp;</span> cont, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='priqueue.cons.alloc-10'><div class='marginalizedparent'><a class='marginalized' href='#priqueue.cons.alloc-10'>10</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15230'>#</a></div><div class='texpara'><div id='priqueue.cons.alloc-10.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'>c</span> with
<span class='texttt'>cont</span> as the first argument and <span class='texttt'>a</span> as the second argument, and
initializes <span class='texttt'>comp</span> with <span class='texttt'>compare</span>;
calls <span class='texttt'>c<span class='operator'>.</span>insert<span class='parenthesis'>(</span>c<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, first, last<span class='parenthesis'>)</span></span>; and
finally calls <span class='texttt'>make_<span class='shy'></span>heap<span class='parenthesis'>(</span>c<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, c<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, comp<span class='parenthesis'>)</span></span><a class='hidden_link' href='#priqueue.cons.alloc-10.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:priority_queue,constructor_____________'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:priority_queue,constructor_____________'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> priority_queue<span class='parenthesis'>(</span>InputIterator first, InputIterator last, <span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> compare, Container<span class='operator'>&amp;</span><span class='operator'>&amp;</span> cont,
                 <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='priqueue.cons.alloc-11'><div class='marginalizedparent'><a class='marginalized' href='#priqueue.cons.alloc-11'>11</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15247'>#</a></div><div class='texpara'><div id='priqueue.cons.alloc-11.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'>c</span> with
<span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>move<span class='parenthesis'>(</span>cont<span class='parenthesis'>)</span></span> as the first argument and
<span class='texttt'>a</span> as the second argument, and
initializes <span class='texttt'>comp</span> with <span class='texttt'>compare</span>;
calls <span class='texttt'>c<span class='operator'>.</span>insert<span class='parenthesis'>(</span>c<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, first, last<span class='parenthesis'>)</span></span>; and
finally calls <span class='texttt'>make_<span class='shy'></span>heap<span class='parenthesis'>(</span>c<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, c<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, comp<span class='parenthesis'>)</span></span><a class='hidden_link' href='#priqueue.cons.alloc-11.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:priority_queue,constructor______________'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:priority_queue,constructor______________'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range_______________________________________________________________________________________________'><span class='texttt'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> priority_queue<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> Compare<span class='operator'>&amp;</span> compare, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='priqueue.cons.alloc-12'><div class='marginalizedparent'><a class='marginalized' href='#priqueue.cons.alloc-12'>12</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15264'>#</a></div><div class='texpara'><div id='priqueue.cons.alloc-12.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'>comp</span> with <span class='texttt'>compare</span> and
<span class='texttt'>c</span> with <span class='texttt'>ranges<span class='operator'>&#x200b;::&#x200b;</span>to<span class='anglebracket'>&lt;</span>Container<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>rg<span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span></span>;
calls <span class='texttt'>make_<span class='shy'></span>heap<span class='parenthesis'>(</span>c<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, c<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, comp<span class='parenthesis'>)</span></span><a class='hidden_link' href='#priqueue.cons.alloc-12.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:priority_queue,constructor_______________'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:priority_queue,constructor_______________'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range________________________________________________________________________________________________'><span class='texttt'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> priority_queue<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='priqueue.cons.alloc-13'><div class='marginalizedparent'><a class='marginalized' href='#priqueue.cons.alloc-13'>13</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15278'>#</a></div><div class='texpara'><div id='priqueue.cons.alloc-13.sentence-1' class='sentence'><i >Effects</i>: Initializes
<span class='texttt'>c</span> with <span class='texttt'>ranges<span class='operator'>&#x200b;::&#x200b;</span>to<span class='anglebracket'>&lt;</span>Container<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>rg<span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span></span>;
calls <span class='texttt'>make_<span class='shy'></span>heap<span class='parenthesis'>(</span>c<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, c<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, comp<span class='parenthesis'>)</span></span><a class='hidden_link' href='#priqueue.cons.alloc-13.sentence-1'>.</a></div></div></div></div></div><div id='priqueue.members' class='section'><h4 ><a class='secnum' href='#priqueue.members' style='min-width:95pt'>24.6.7.4</a> Members <a class='abbr_ref' href='priqueue.members'>[priqueue.members]</a></h4><div class='texpara'><div id='lib:priority_queue,push'><div id='lib:push,priority_queue'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:push,priority_queue'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>void</span> push<span class='parenthesis'>(</span><span class='keyword'>const</span> value_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='priqueue.members-1'><div class='marginalizedparent'><a class='marginalized' href='#priqueue.members-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15293'>#</a></div><div class='texpara'><div id='priqueue.members-1.sentence-1' class='sentence'><i >Effects</i>: As if by:
<span class='codeblock'>c<span class='operator'>.</span>push_back<span class='parenthesis'>(</span>x<span class='parenthesis'>)</span>;
push_heap<span class='parenthesis'>(</span>c<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, c<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, comp<span class='parenthesis'>)</span>;
</span></div></div></div></div><div class='texpara'><div id='lib:priority_queue,push_'><div id='lib:push,priority_queue_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:push,priority_queue_'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>void</span> push<span class='parenthesis'>(</span>value_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='priqueue.members-2'><div class='marginalizedparent'><a class='marginalized' href='#priqueue.members-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15308'>#</a></div><div class='texpara'><div id='priqueue.members-2.sentence-1' class='sentence'><i >Effects</i>: As if by:
<span class='codeblock'>c<span class='operator'>.</span>push_back<span class='parenthesis'>(</span>std<span class='operator'>::</span>move<span class='parenthesis'>(</span>x<span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
push_heap<span class='parenthesis'>(</span>c<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, c<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, comp<span class='parenthesis'>)</span>;
</span></div></div></div></div><div class='texpara'><div id='lib:priority_queue,push_range'><div id='lib:push_range,priority_queue'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:push_range,priority_queue'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range_________________________________________________________________________________________________'><span class='texttt'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>void</span> push_range<span class='parenthesis'>(</span>R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='priqueue.members-3'><div class='marginalizedparent'><a class='marginalized' href='#priqueue.members-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15324'>#</a></div><div class='texpara'><div id='priqueue.members-3.sentence-1' class='sentence'><i >Effects</i>: Inserts all elements of <span class='texttt'>rg</span> in <span class='texttt'>c</span> via
<span class='texttt'>c<span class='operator'>.</span>append_<span class='shy'></span>range<span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>rg<span class='parenthesis'>)</span><span class='parenthesis'>)</span></span> if that is a valid expression, or
<span class='texttt'>ranges<span class='operator'>&#x200b;::&#x200b;</span>copy<span class='parenthesis'>(</span>rg, back_<span class='shy'></span>inserter<span class='parenthesis'>(</span>c<span class='parenthesis'>)</span><span class='parenthesis'>)</span></span> otherwise<a class='hidden_link' href='#priqueue.members-3.sentence-1'>.</a></div> <div id='priqueue.members-3.sentence-2' class='sentence'>Then restores the heap property as if by
<span class='texttt'>make_<span class='shy'></span>heap<span class='parenthesis'>(</span>c<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, c<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, comp<span class='parenthesis'>)</span></span><a class='hidden_link' href='#priqueue.members-3.sentence-2'>.</a></div></div></div></div><div class='para' id='priqueue.members-4'><div class='marginalizedparent'><a class='marginalized' href='#priqueue.members-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15332'>#</a></div><div class='texpara'><div id='priqueue.members-4.sentence-1' class='sentence'><i >Postconditions</i>: <span class='texttt'>is_<span class='shy'></span>heap<span class='parenthesis'>(</span>c<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, c<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, comp<span class='parenthesis'>)</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#priqueue.members-4.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:priority_queue,emplace'><div id='lib:emplace,priority_queue'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:emplace,priority_queue'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> <span class='keyword'>void</span> emplace<span class='parenthesis'>(</span>Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='priqueue.members-5'><div class='marginalizedparent'><a class='marginalized' href='#priqueue.members-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15343'>#</a></div><div class='texpara'><div id='priqueue.members-5.sentence-1' class='sentence'><i >Effects</i>: As if by:
<span class='codeblock'>c<span class='operator'>.</span>emplace_back<span class='parenthesis'>(</span>std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>Args<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>args<span class='parenthesis'>)</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span>;
push_heap<span class='parenthesis'>(</span>c<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, c<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, comp<span class='parenthesis'>)</span>;
</span></div></div></div></div><div class='texpara'><div id='lib:priority_queue,pop'><div id='lib:pop,priority_queue'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:pop,priority_queue'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>void</span> pop<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='priqueue.members-6'><div class='marginalizedparent'><a class='marginalized' href='#priqueue.members-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15359'>#</a></div><div class='texpara'><div id='priqueue.members-6.sentence-1' class='sentence'><i >Effects</i>: As if by:
<span class='codeblock'>pop_heap<span class='parenthesis'>(</span>c<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, c<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, comp<span class='parenthesis'>)</span>;
c<span class='operator'>.</span>pop_back<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
</span></div></div></div></div></div><div id='priqueue.special' class='section'><h4 ><a class='secnum' href='#priqueue.special' style='min-width:95pt'>24.6.7.5</a> Specialized algorithms <a class='abbr_ref' href='priqueue.special'>[priqueue.special]</a></h4><div class='texpara'><div id='lib:priority_queue,swap'><div id='lib:swap,priority_queue'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:swap,priority_queue'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Container, <span class='keyword'>class</span> Compare<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>void</span> swap<span class='parenthesis'>(</span>priority_queue<span class='anglebracket'>&lt;</span>T, Container, Compare<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x,
            priority_queue<span class='anglebracket'>&lt;</span>T, Container, Compare<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span> <span class='keyword'>noexcept</span><span class='parenthesis'>(</span><span class='keyword'>noexcept</span><span class='parenthesis'>(</span>x<span class='operator'>.</span>swap<span class='parenthesis'>(</span>y<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='priqueue.special-1'><div class='marginalizedparent'><a class='marginalized' href='#priqueue.special-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15378'>#</a></div><div class='texpara'><div id='priqueue.special-1.sentence-1' class='sentence'><i >Constraints</i>: <span class='texttt'>is_<span class='shy'></span>swappable_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>Container<span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>true</span></span> and
<span class='texttt'>is_<span class='shy'></span>swappable_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>Compare<span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#priqueue.special-1.sentence-1'>.</a></div></div></div></div><div class='para' id='priqueue.special-2'><div class='marginalizedparent'><a class='marginalized' href='#priqueue.special-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15383'>#</a></div><div class='texpara'><div id='priqueue.special-2.sentence-1' class='sentence'><i >Effects</i>: As if by <span class='texttt'>x<span class='operator'>.</span>swap<span class='parenthesis'>(</span>y<span class='parenthesis'>)</span></span><a class='hidden_link' href='#priqueue.special-2.sentence-1'>.</a></div></div></div></div></div></div><div id='stack' class='section'><h3 ><a class='secnum' href='#stack' style='min-width:80pt'>24.6.8</a> Class template <span class='texttt'>stack</span> <a class='abbr_ref' href='stack'>[stack]</a></h3><div id='stack.general' class='section'><h4 ><a class='secnum' href='#stack.general' style='min-width:95pt'>24.6.8.1</a> General <a class='abbr_ref' href='stack.general'>[stack.general]</a></h4><div class='para' id='stack.general-1'><div class='marginalizedparent'><a class='marginalized' href='#stack.general-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15392'>#</a></div><div class='texpara'><div id='stack.general-1.sentence-1' class='sentence'><a class='index' id='lib:stack'></a>Any sequence container supporting operations
<span class='texttt'>back<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>,
<span class='texttt'>push_<span class='shy'></span>back<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>
and
<span class='texttt'>pop_<span class='shy'></span>back<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>
can be used to instantiate
<span class='texttt'>stack</span><a class='hidden_link' href='#stack.general-1.sentence-1'>.</a></div> <div id='stack.general-1.sentence-2' class='sentence'>In particular,
<a href='#vector' title='24.3.12&emsp;Class template vector&emsp;[vector]'><span class='texttt'>vector</span></a>,
<a href='#list' title='24.3.11&emsp;Class template list&emsp;[list]'><span class='texttt'>list</span></a>
and
<a href='#deque' title='24.3.9&emsp;Class template deque&emsp;[deque]'><span class='texttt'>deque</span></a>
can be used<a class='hidden_link' href='#stack.general-1.sentence-2'>.</a></div></div></div></div><div id='stack.defn' class='section'><h4 ><a class='secnum' href='#stack.defn' style='min-width:95pt'>24.6.8.2</a> Definition <a class='abbr_ref' href='stack.defn'>[stack.defn]</a></h4><div class='texpara'><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Container <span class='operator'>=</span> deque<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> stack <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='keyword'>using</span> value_type      <span class='operator'>=</span> <span class='keyword'>typename</span> Container<span class='operator'>::</span>value_type;
    <span class='keyword'>using</span> reference       <span class='operator'>=</span> <span class='keyword'>typename</span> Container<span class='operator'>::</span>reference;
    <span class='keyword'>using</span> const_reference <span class='operator'>=</span> <span class='keyword'>typename</span> Container<span class='operator'>::</span>const_reference;
    <span class='keyword'>using</span> size_type       <span class='operator'>=</span> <span class='keyword'>typename</span> Container<span class='operator'>::</span>size_type;
    <span class='keyword'>using</span> container_type  <span class='operator'>=</span> Container;

  <span class='keyword'>protected</span><span class='operator'>:</span>
    Container c;

  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class="keyword added">constexpr</span> stack<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>:</span> stack<span class='parenthesis'>(</span>Container<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> stack<span class='parenthesis'>(</span><span class='keyword'>const</span> Container<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> stack<span class='parenthesis'>(</span>Container<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> stack<span class='parenthesis'>(</span>InputIterator first, InputIterator last<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range__________________________________________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> stack<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> stack<span class='parenthesis'>(</span><span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> stack<span class='parenthesis'>(</span><span class='keyword'>const</span> Container<span class='operator'>&amp;</span>, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> stack<span class='parenthesis'>(</span>Container<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> stack<span class='parenthesis'>(</span><span class='keyword'>const</span> stack<span class='operator'>&amp;</span>, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> stack<span class='parenthesis'>(</span>stack<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> stack<span class='parenthesis'>(</span>InputIterator first, InputIterator last, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range___________________________________________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> stack<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> <span class='keyword'>bool</span>              empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>     <span class='curlybracket'>{</span> <span class='keyword'>return</span> c<span class='operator'>.</span>empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> size_type         size<span class='parenthesis'>(</span><span class='parenthesis'>)</span>  <span class='keyword'>const</span>     <span class='curlybracket'>{</span> <span class='keyword'>return</span> c<span class='operator'>.</span>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> reference         top<span class='parenthesis'>(</span><span class='parenthesis'>)</span>             <span class='curlybracket'>{</span> <span class='keyword'>return</span> c<span class='operator'>.</span>back<span class='parenthesis'>(</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> const_reference   top<span class='parenthesis'>(</span><span class='parenthesis'>)</span>   <span class='keyword'>const</span>     <span class='curlybracket'>{</span> <span class='keyword'>return</span> c<span class='operator'>.</span>back<span class='parenthesis'>(</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> push<span class='parenthesis'>(</span><span class='keyword'>const</span> value_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>      <span class='curlybracket'>{</span> c<span class='operator'>.</span>push_back<span class='parenthesis'>(</span>x<span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> push<span class='parenthesis'>(</span>value_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>           <span class='curlybracket'>{</span> c<span class='operator'>.</span>push_back<span class='parenthesis'>(</span>std<span class='operator'>::</span>move<span class='parenthesis'>(</span>x<span class='parenthesis'>)</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range____________________________________________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> push_range<span class='parenthesis'>(</span>R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>)</span> emplace<span class='parenthesis'>(</span>Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>
        <span class='curlybracket'>{</span> <span class='keyword'>return</span> c<span class='operator'>.</span>emplace_back<span class='parenthesis'>(</span>std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>Args<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>args<span class='parenthesis'>)</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> pop<span class='parenthesis'>(</span><span class='parenthesis'>)</span>                          <span class='curlybracket'>{</span> c<span class='operator'>.</span>pop_back<span class='parenthesis'>(</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> swap<span class='parenthesis'>(</span>stack<span class='operator'>&amp;</span> s<span class='parenthesis'>)</span> <span class='keyword'>noexcept</span><span class='parenthesis'>(</span>is_nothrow_swappable_v<span class='anglebracket'>&lt;</span>Container<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>
      <span class='curlybracket'>{</span> <span class='keyword'>using</span> std<span class='operator'>::</span>swap; swap<span class='parenthesis'>(</span>c, s<span class='operator'>.</span>c<span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
  <span class='curlybracket'>}</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Container<span class='anglebracket'>&gt;</span>
    stack<span class='parenthesis'>(</span>Container<span class='parenthesis'>)</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> stack<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Container<span class='operator'>::</span>value_type, Container<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
    stack<span class='parenthesis'>(</span>InputIterator, InputIterator<span class='parenthesis'>)</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> stack<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range_____________________________________'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R<span class='anglebracket'>&gt;</span>
    stack<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> stack<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Container, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    stack<span class='parenthesis'>(</span>Container, Allocator<span class='parenthesis'>)</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> stack<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Container<span class='operator'>::</span>value_type, Container<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    stack<span class='parenthesis'>(</span>InputIterator, InputIterator, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> stack<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>, deque<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>,
               Allocator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range______________________________________'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    stack<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> stack<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, deque<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Container, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
    <span class='keyword'>struct</span> uses_allocator<span class='anglebracket'>&lt;</span>stack<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span>, Alloc<span class='anglebracket'>&gt;</span>
      <span class='operator'>:</span> uses_allocator<span class='anglebracket'>&lt;</span>Container, Alloc<span class='anglebracket'>&gt;</span><span class='operator'>::</span>type <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></div></div><div id='stack.cons' class='section'><h4 ><a class='secnum' href='#stack.cons' style='min-width:95pt'>24.6.8.3</a> Constructors <a class='abbr_ref' href='stack.cons'>[stack.cons]</a></h4><div class='texpara'><div id='lib:stack,constructor'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:stack,constructor'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> stack<span class='parenthesis'>(</span><span class='keyword'>const</span> Container<span class='operator'>&amp;</span> cont<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='stack.cons-1'><div class='marginalizedparent'><a class='marginalized' href='#stack.cons-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15491'>#</a></div><div class='texpara'><div id='stack.cons-1.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'>c</span> with <span class='texttt'>cont</span><a class='hidden_link' href='#stack.cons-1.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:stack,constructor_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:stack,constructor_'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> stack<span class='parenthesis'>(</span>Container<span class='operator'>&amp;</span><span class='operator'>&amp;</span> cont<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='stack.cons-2'><div class='marginalizedparent'><a class='marginalized' href='#stack.cons-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15502'>#</a></div><div class='texpara'><div id='stack.cons-2.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'>c</span> with <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>move<span class='parenthesis'>(</span>cont<span class='parenthesis'>)</span></span><a class='hidden_link' href='#stack.cons-2.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:stack,constructor__'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:stack,constructor__'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
  stack<span class='parenthesis'>(</span>InputIterator first, InputIterator last<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='stack.cons-3'><div class='marginalizedparent'><a class='marginalized' href='#stack.cons-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15514'>#</a></div><div class='texpara'><div id='stack.cons-3.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'>c</span> with
<span class='texttt'>first</span> as the first argument and <span class='texttt'>last</span> as the second argument<a class='hidden_link' href='#stack.cons-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:stack,constructor___'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:stack,constructor___'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range_____________________________________________________________________________________________________'><span class='texttt'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> stack<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='stack.cons-4'><div class='marginalizedparent'><a class='marginalized' href='#stack.cons-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15527'>#</a></div><div class='texpara'><div id='stack.cons-4.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'>c</span> with <span class='texttt'>ranges<span class='operator'>&#x200b;::&#x200b;</span>to<span class='anglebracket'>&lt;</span>Container<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>rg<span class='parenthesis'>)</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#stack.cons-4.sentence-1'>.</a></div></div></div></div></div><div id='stack.cons.alloc' class='section'><h4 ><a class='secnum' href='#stack.cons.alloc' style='min-width:95pt'>24.6.8.4</a> Constructors with allocators <a class='abbr_ref' href='stack.cons.alloc'>[stack.cons.alloc]</a></h4><div class='para' id='stack.cons.alloc-1'><div class='marginalizedparent'><a class='marginalized' href='#stack.cons.alloc-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15534'>#</a></div><div class='texpara'><div id='stack.cons.alloc-1.sentence-1' class='sentence'>If <span class='texttt'>uses_<span class='shy'></span>allocator_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>container_<span class='shy'></span>type, Alloc<span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>false</span></span>
the constructors in this subclause shall not participate in overload resolution<a class='hidden_link' href='#stack.cons.alloc-1.sentence-1'>.</a></div></div></div><div class='texpara'><div id='lib:stack,constructor____'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:stack,constructor____'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> stack<span class='parenthesis'>(</span><span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='stack.cons.alloc-2'><div class='marginalizedparent'><a class='marginalized' href='#stack.cons.alloc-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15544'>#</a></div><div class='texpara'><div id='stack.cons.alloc-2.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'>c</span> with <span class='texttt'>a</span><a class='hidden_link' href='#stack.cons.alloc-2.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:stack,constructor_____'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:stack,constructor_____'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> stack<span class='parenthesis'>(</span><span class='keyword'>const</span> container_type<span class='operator'>&amp;</span> cont, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='stack.cons.alloc-3'><div class='marginalizedparent'><a class='marginalized' href='#stack.cons.alloc-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15555'>#</a></div><div class='texpara'><div id='stack.cons.alloc-3.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'>c</span> with <span class='texttt'>cont</span> as the first argument and <span class='texttt'>a</span> as the
second argument<a class='hidden_link' href='#stack.cons.alloc-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:stack,constructor______'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:stack,constructor______'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> stack<span class='parenthesis'>(</span>container_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> cont, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='stack.cons.alloc-4'><div class='marginalizedparent'><a class='marginalized' href='#stack.cons.alloc-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15567'>#</a></div><div class='texpara'><div id='stack.cons.alloc-4.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'>c</span> with <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>move<span class='parenthesis'>(</span>cont<span class='parenthesis'>)</span></span> as the first argument and <span class='texttt'>a</span>
as the second argument<a class='hidden_link' href='#stack.cons.alloc-4.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:stack,constructor_______'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:stack,constructor_______'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> stack<span class='parenthesis'>(</span><span class='keyword'>const</span> stack<span class='operator'>&amp;</span> s, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='stack.cons.alloc-5'><div class='marginalizedparent'><a class='marginalized' href='#stack.cons.alloc-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15579'>#</a></div><div class='texpara'><div id='stack.cons.alloc-5.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'>c</span> with <span class='texttt'>s<span class='operator'>.</span>c</span> as the first argument and <span class='texttt'>a</span>
as the second argument<a class='hidden_link' href='#stack.cons.alloc-5.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:stack,constructor________'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:stack,constructor________'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> stack<span class='parenthesis'>(</span>stack<span class='operator'>&amp;</span><span class='operator'>&amp;</span> s, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='stack.cons.alloc-6'><div class='marginalizedparent'><a class='marginalized' href='#stack.cons.alloc-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15591'>#</a></div><div class='texpara'><div id='stack.cons.alloc-6.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'>c</span> with <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>move<span class='parenthesis'>(</span>s<span class='operator'>.</span>c<span class='parenthesis'>)</span></span> as the first argument and <span class='texttt'>a</span>
as the second argument<a class='hidden_link' href='#stack.cons.alloc-6.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:stack,constructor_________'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:stack,constructor_________'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> stack<span class='parenthesis'>(</span>InputIterator first, InputIterator last, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> alloc<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='stack.cons.alloc-7'><div class='marginalizedparent'><a class='marginalized' href='#stack.cons.alloc-7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15604'>#</a></div><div class='texpara'><div id='stack.cons.alloc-7.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'>c</span> with
<span class='texttt'>first</span> as the first argument,
<span class='texttt'>last</span> as the second argument, and
<span class='texttt'>alloc</span> as the third argument<a class='hidden_link' href='#stack.cons.alloc-7.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:stack,constructor__________'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:stack,constructor__________'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range______________________________________________________________________________________________________'><span class='texttt'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> stack<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='stack.cons.alloc-8'><div class='marginalizedparent'><a class='marginalized' href='#stack.cons.alloc-8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15619'>#</a></div><div class='texpara'><div id='stack.cons.alloc-8.sentence-1' class='sentence'><i >Effects</i>: Initializes
<span class='texttt'>c</span> with <span class='texttt'>ranges<span class='operator'>&#x200b;::&#x200b;</span>to<span class='anglebracket'>&lt;</span>Container<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>rg<span class='parenthesis'>)</span>, a<span class='parenthesis'>)</span></span><a class='hidden_link' href='#stack.cons.alloc-8.sentence-1'>.</a></div></div></div></div></div><div id='stack.mod' class='section'><h4 ><a class='secnum' href='#stack.mod' style='min-width:95pt'>24.6.8.5</a> Modifiers <a class='abbr_ref' href='stack.mod'>[stack.mod]</a></h4><div class='texpara'><div id='lib:stack,push_range'><div id='lib:push_range,stack'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:push_range,stack'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range_______________________________________________________________________________________________________'><span class='texttt'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>void</span> push_range<span class='parenthesis'>(</span>R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='stack.mod-1'><div class='marginalizedparent'><a class='marginalized' href='#stack.mod-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15634'>#</a></div><div class='texpara'><div id='stack.mod-1.sentence-1' class='sentence'><i >Effects</i>: Equivalent to <span class='texttt'>c<span class='operator'>.</span>append_<span class='shy'></span>range<span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>rg<span class='parenthesis'>)</span><span class='parenthesis'>)</span></span>
if that is a valid expression,
otherwise <span class='texttt'>ranges<span class='operator'>&#x200b;::&#x200b;</span>copy<span class='parenthesis'>(</span>rg, back_<span class='shy'></span>inserter<span class='parenthesis'>(</span>c<span class='parenthesis'>)</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#stack.mod-1.sentence-1'>.</a></div></div></div></div></div><div id='stack.ops' class='section'><h4 ><a class='secnum' href='#stack.ops' style='min-width:95pt'>24.6.8.6</a> Operators <a class='abbr_ref' href='stack.ops'>[stack.ops]</a></h4><div class='texpara'><div id='lib:stack,operator=='><div id='lib:operator==,stack'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator==,stack'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Container<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> stack<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x, <span class='keyword'>const</span> stack<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='stack.ops-1'><div class='marginalizedparent'><a class='marginalized' href='#stack.ops-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15650'>#</a></div><div class='texpara'><div id='stack.ops-1.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>x<span class='operator'>.</span>c <span class='operator'>=</span><span class='operator'>=</span> y<span class='operator'>.</span>c</span><a class='hidden_link' href='#stack.ops-1.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:operator!=,stack'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator!=,stack'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Container<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>!</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> stack<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x, <span class='keyword'>const</span> stack<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='stack.ops-2'><div class='marginalizedparent'><a class='marginalized' href='#stack.ops-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15662'>#</a></div><div class='texpara'><div id='stack.ops-2.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>x<span class='operator'>.</span>c <span class='operator'>!</span><span class='operator'>=</span> y<span class='operator'>.</span>c</span><a class='hidden_link' href='#stack.ops-2.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:stack,operator<'><div id='lib:operator<,stack'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator%3c,stack'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Container<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span> <span class='parenthesis'>(</span><span class='keyword'>const</span> stack<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x, <span class='keyword'>const</span> stack<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='stack.ops-3'><div class='marginalizedparent'><a class='marginalized' href='#stack.ops-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15674'>#</a></div><div class='texpara'><div id='stack.ops-3.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>x<span class='operator'>.</span>c <span class='anglebracket'>&lt;</span> y<span class='operator'>.</span>c</span><a class='hidden_link' href='#stack.ops-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:stack,operator>'><div id='lib:operator>,stack'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator%3e,stack'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Container<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='anglebracket'>&gt;</span> <span class='parenthesis'>(</span><span class='keyword'>const</span> stack<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x, <span class='keyword'>const</span> stack<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='stack.ops-4'><div class='marginalizedparent'><a class='marginalized' href='#stack.ops-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15686'>#</a></div><div class='texpara'><div id='stack.ops-4.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>x<span class='operator'>.</span>c <span class='anglebracket'>&gt;</span> y<span class='operator'>.</span>c</span><a class='hidden_link' href='#stack.ops-4.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:stack,operator<='><div id='lib:operator<=,stack'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator%3c=,stack'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Container<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> stack<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x, <span class='keyword'>const</span> stack<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='stack.ops-5'><div class='marginalizedparent'><a class='marginalized' href='#stack.ops-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15698'>#</a></div><div class='texpara'><div id='stack.ops-5.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>x<span class='operator'>.</span>c <span class='anglebracket'>&lt;</span><span class='operator'>=</span> y<span class='operator'>.</span>c</span><a class='hidden_link' href='#stack.ops-5.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:stack,operator>='><div id='lib:operator>=,stack'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator%3e=,stack'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Container<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='anglebracket'>&gt;</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> stack<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x, <span class='keyword'>const</span> stack<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='stack.ops-6'><div class='marginalizedparent'><a class='marginalized' href='#stack.ops-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15710'>#</a></div><div class='texpara'><div id='stack.ops-6.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>x<span class='operator'>.</span>c <span class='anglebracket'>&gt;</span><span class='operator'>=</span> y<span class='operator'>.</span>c</span><a class='hidden_link' href='#stack.ops-6.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:stack,operator<=>'><div id='lib:operator<=>,stack'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator%3c=%3e,stack'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <a href='cmp.concept#concept:three_way_comparable' title='17.11.4&emsp;Concept three_&shy;way_&shy;comparable&emsp;[cmp.concept]'><span id='conceptref:three_way_comparable____'><span class='texttt'>three_<span class='shy'></span>way_<span class='shy'></span>comparable</span></span></a> Container<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> compare_three_way_result_t<span class='anglebracket'>&lt;</span>Container<span class='anglebracket'>&gt;</span>
    <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='operator'>=</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='keyword'>const</span> stack<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x, <span class='keyword'>const</span> stack<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='stack.ops-7'><div class='marginalizedparent'><a class='marginalized' href='#stack.ops-7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15723'>#</a></div><div class='texpara'><div id='stack.ops-7.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>x<span class='operator'>.</span>c <span class='anglebracket'>&lt;</span><span class='operator'>=</span><span class='anglebracket'>&gt;</span> y<span class='operator'>.</span>c</span><a class='hidden_link' href='#stack.ops-7.sentence-1'>.</a></div></div></div></div></div><div id='stack.special' class='section'><h4 ><a class='secnum' href='#stack.special' style='min-width:95pt'>24.6.8.7</a> Specialized algorithms <a class='abbr_ref' href='stack.special'>[stack.special]</a></h4><div class='texpara'><div id='lib:stack,swap'><div id='lib:swap,stack'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:swap,stack'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> T, <span class='keyword'>class</span> Container<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>void</span> swap<span class='parenthesis'>(</span>stack<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> x, stack<span class='anglebracket'>&lt;</span>T, Container<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> y<span class='parenthesis'>)</span> <span class='keyword'>noexcept</span><span class='parenthesis'>(</span><span class='keyword'>noexcept</span><span class='parenthesis'>(</span>x<span class='operator'>.</span>swap<span class='parenthesis'>(</span>y<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='stack.special-1'><div class='marginalizedparent'><a class='marginalized' href='#stack.special-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15737'>#</a></div><div class='texpara'><div id='stack.special-1.sentence-1' class='sentence'><i >Constraints</i>: <span class='texttt'>is_<span class='shy'></span>swappable_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>Container<span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#stack.special-1.sentence-1'>.</a></div></div></div></div><div class='para' id='stack.special-2'><div class='marginalizedparent'><a class='marginalized' href='#stack.special-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15741'>#</a></div><div class='texpara'><div id='stack.special-2.sentence-1' class='sentence'><i >Effects</i>: As if by <span class='texttt'>x<span class='operator'>.</span>swap<span class='parenthesis'>(</span>y<span class='parenthesis'>)</span></span><a class='hidden_link' href='#stack.special-2.sentence-1'>.</a></div></div></div></div></div></div><div id='flat.map' class='section'><h3 ><a class='secnum' href='#flat.map' style='min-width:80pt'>24.6.9</a> Class template <span class='texttt'>flat_<span class='shy'></span>map</span> <a class='abbr_ref' href='flat.map'>[flat.map]</a></h3><div id='flat.map.overview' class='section'><h4 ><a class='secnum' href='#flat.map.overview' style='min-width:95pt'>24.6.9.1</a> Overview <a class='abbr_ref' href='flat.map.overview'>[flat.map.overview]</a></h4><div class='para' id='flat.map.overview-1'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.overview-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15750'>#</a></div><div class='texpara'><div id='flat.map.overview-1.sentence-1' class='sentence'><a class='index' id='lib:flat_map'></a>A <span class='texttt'>flat_<span class='shy'></span>map</span> is a container adaptor
that provides an associative container interface
that supports unique keys
(i.e., contains at most one of each key value) and
provides for fast retrieval of values of another type <span class='texttt'>T</span>
based on the keys<a class='hidden_link' href='#flat.map.overview-1.sentence-1'>.</a></div> <div id='flat.map.overview-1.sentence-2' class='sentence'><span class='texttt'>flat_<span class='shy'></span>map</span> supports iterators
that meet the <i >Cpp17InputIterator</i> requirements and
model the
<a href='iterator.concept.random.access#concept:random_access_iterator' title='25.3.4.13&emsp;Concept random_&shy;access_&shy;iterator&emsp;[iterator.concept.random.access]'><span id='conceptref:random_access_iterator'><span class='texttt'>random_<span class='shy'></span>access_<span class='shy'></span>iterator</span></span></a> concept (<a href='iterator.concept.random.access' title='25.3.4.13&emsp;Concept random_&shy;access_&shy;iterator'>[iterator.<span class='shy'></span>concept.<span class='shy'></span>random.<span class='shy'></span>access]</a>)<a class='hidden_link' href='#flat.map.overview-1.sentence-2'>.</a></div></div></div><div class='para' id='flat.map.overview-2'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.overview-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15763'>#</a></div><div class='texpara'><div id='flat.map.overview-2.sentence-1' class='sentence'>A <span class='texttt'>flat_<span class='shy'></span>map</span> meets all of the requirements
of a container (<a href='#container.reqmts' title='24.2.2.2&emsp;Container requirements'>[container.<span class='shy'></span>reqmts]</a>) and
of a reversible container (<a href='#container.rev.reqmts' title='24.2.2.3&emsp;Reversible container requirements'>[container.<span class='shy'></span>rev.<span class='shy'></span>reqmts]</a>),
plus the optional container requirements (<a href='#container.opt.reqmts' title='24.2.2.4&emsp;Optional container requirements'>[container.<span class='shy'></span>opt.<span class='shy'></span>reqmts]</a>)<a class='hidden_link' href='#flat.map.overview-2.sentence-1'>.</a></div> <div id='flat.map.overview-2.sentence-2' class='sentence'><span class='texttt'>flat_<span class='shy'></span>map</span> meets the requirements of
an associative container (<a href='#associative.reqmts' title='24.2.7&emsp;Associative containers'>[associative.<span class='shy'></span>reqmts]</a>),
except that:
<ul class='itemize'><li id='flat.map.overview-2.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#flat.map.overview-2.1'>(2.1)</a></div>it does not meet the requirements related to node handles (<a href='#container.node' title='24.2.5&emsp;Node handles'>[container.<span class='shy'></span>node]</a>),</li><li id='flat.map.overview-2.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#flat.map.overview-2.2'>(2.2)</a></div>it does not meet the requirements related to iterator invalidation, and</li><li id='flat.map.overview-2.3'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#flat.map.overview-2.3'>(2.3)</a></div>the time complexity of the operations that insert or erase a single
element from the map is linear, including the ones that take an insertion
position iterator<a class='hidden_link' href='#flat.map.overview-2.sentence-2'>.</a></li></ul></div> <div id='flat.map.overview-note-1' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#flat.map.overview-note-1'>1</a></i>:&ensp;<div id='flat.map.overview-2.sentence-3' class='sentence'>A <span class='texttt'>flat_<span class='shy'></span>map</span> does not meet the additional requirements of
an allocator-aware container (<a href='#container.alloc.reqmts' title='24.2.2.5&emsp;Allocator-aware containers'>[container.<span class='shy'></span>alloc.<span class='shy'></span>reqmts]</a>)<a class='hidden_link' href='#flat.map.overview-2.sentence-3'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div></div><div class='para' id='flat.map.overview-3'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.overview-3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15786'>#</a></div><div class='texpara'><div id='flat.map.overview-3.sentence-1' class='sentence'>A <span class='texttt'>flat_<span class='shy'></span>map</span> also provides most operations
described in <a href='#associative.reqmts' title='24.2.7&emsp;Associative containers'>[associative.<span class='shy'></span>reqmts]</a> for unique keys<a class='hidden_link' href='#flat.map.overview-3.sentence-1'>.</a></div> <div id='flat.map.overview-3.sentence-2' class='sentence'>This means that a <span class='texttt'>flat_<span class='shy'></span>map</span> supports
the <span class='texttt'>a_<span class='shy'></span>uniq</span> operations in <a href='#associative.reqmts' title='24.2.7&emsp;Associative containers'>[associative.<span class='shy'></span>reqmts]</a>
but not the <span class='texttt'>a_<span class='shy'></span>eq</span> operations<a class='hidden_link' href='#flat.map.overview-3.sentence-2'>.</a></div> <div id='flat.map.overview-3.sentence-3' class='sentence'>For a <span class='texttt'>flat_<span class='shy'></span>map<span class='anglebracket'>&lt;</span>Key, T<span class='anglebracket'>&gt;</span></span>
the <span class='texttt'>key_<span class='shy'></span>type</span> is <span class='texttt'>Key</span> and
the <span class='texttt'>value_<span class='shy'></span>type</span> is <span class='texttt'>pair<span class='anglebracket'>&lt;</span>Key, T<span class='anglebracket'>&gt;</span></span><a class='hidden_link' href='#flat.map.overview-3.sentence-3'>.</a></div></div></div><div class='para' id='flat.map.overview-4'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.overview-4'>4</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15796'>#</a></div><div class='texpara'><div id='flat.map.overview-4.sentence-1' class='sentence'>Descriptions are provided here only for operations on <span class='texttt'>flat_<span class='shy'></span>map</span> that
are not described in one of those sets of requirements or for operations where
there is additional semantic information<a class='hidden_link' href='#flat.map.overview-4.sentence-1'>.</a></div></div></div><div class='para' id='flat.map.overview-5'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.overview-5'>5</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15801'>#</a></div><div class='texpara'><div id='flat.map.overview-5.sentence-1' class='sentence'>A <span class='texttt'>flat_<span class='shy'></span>map</span> maintains the following invariants:
<ul class='itemize'><li id='flat.map.overview-5.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#flat.map.overview-5.1'>(5.1)</a></div>it contains the same number of keys and values;</li><li id='flat.map.overview-5.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#flat.map.overview-5.2'>(5.2)</a></div>the keys are sorted with respect to the comparison object; and</li><li id='flat.map.overview-5.3'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#flat.map.overview-5.3'>(5.3)</a></div>the value at offset <span class='texttt'>off</span> within the value container is
the value associated with the key at offset <span class='texttt'>off</span>
within the key container<a class='hidden_link' href='#flat.map.overview-5.sentence-1'>.</a></li></ul></div></div></div><div class='para' id='flat.map.overview-6'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.overview-6'>6</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15814'>#</a></div><div class='texpara'><div id='flat.map.overview-6.sentence-1' class='sentence'>If any member function in <a href='#flat.map.defn' title='24.6.9.2&emsp;Definition'>[flat.<span class='shy'></span>map.<span class='shy'></span>defn]</a> exits via an exception
the invariants are restored<a class='hidden_link' href='#flat.map.overview-6.sentence-1'>.</a></div> <div id='flat.map.overview-note-2' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#flat.map.overview-note-2'>2</a></i>:&ensp;<div id='flat.map.overview-6.sentence-2' class='sentence'>This can result in the <span class='texttt'>flat_<span class='shy'></span>map</span> being emptied<a class='hidden_link' href='#flat.map.overview-6.sentence-2'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div></div><div class='para' id='flat.map.overview-7'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.overview-7'>7</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15821'>#</a></div><div class='texpara'><div id='flat.map.overview-7.sentence-1' class='sentence'>Any type <span class='texttt'>C</span>
that meets the sequence container requirements (<a href='#sequence.reqmts' title='24.2.4&emsp;Sequence containers'>[sequence.<span class='shy'></span>reqmts]</a>)
can be used to instantiate <span class='texttt'>flat_<span class='shy'></span>map</span>,
as long as
<span class='texttt'>C<span class='operator'>&#x200b;::&#x200b;</span>iterator</span> meets the <i >Cpp17RandomAccessIterator</i> requirements and
invocations of
member functions <span class='texttt'>C<span class='operator'>&#x200b;::&#x200b;</span>size</span> and <span class='texttt'>C<span class='operator'>&#x200b;::&#x200b;</span>max_<span class='shy'></span>size</span> do not exit via an exception<a class='hidden_link' href='#flat.map.overview-7.sentence-1'>.</a></div> <div id='flat.map.overview-7.sentence-2' class='sentence'>In particular, <span class='texttt'>vector</span> (<a href='#vector' title='24.3.12&emsp;Class template vector'>[vector]</a>) and <span class='texttt'>deque</span> (<a href='#deque' title='24.3.9&emsp;Class template deque'>[deque]</a>)
can be used<a class='hidden_link' href='#flat.map.overview-7.sentence-2'>.</a></div> <div id='flat.map.overview-note-3' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#flat.map.overview-note-3'>3</a></i>:&ensp;<div id='flat.map.overview-7.sentence-3' class='sentence'><span class='texttt'>vector<span class='anglebracket'>&lt;</span><span class='keyword'>bool</span><span class='anglebracket'>&gt;</span></span> is not a sequence container<a class='hidden_link' href='#flat.map.overview-7.sentence-3'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div></div><div class='para' id='flat.map.overview-8'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.overview-8'>8</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15835'>#</a></div><div class='texpara'><div id='flat.map.overview-8.sentence-1' class='sentence'>The program is ill-formed if
<span class='texttt'>Key</span> is not the same type as <span class='texttt'>KeyContainer<span class='operator'>&#x200b;::&#x200b;</span>value_<span class='shy'></span>type</span> or
<span class='texttt'>T</span> is not the same type as <span class='texttt'>MappedContainer<span class='operator'>&#x200b;::&#x200b;</span>value_<span class='shy'></span>type</span><a class='hidden_link' href='#flat.map.overview-8.sentence-1'>.</a></div></div></div><div class='para' id='flat.map.overview-9'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.overview-9'>9</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15840'>#</a></div><div class='texpara'><div id='flat.map.overview-9.sentence-1' class='sentence'>The effect of calling a constructor
that takes
both <span class='texttt'>key_<span class='shy'></span>container_<span class='shy'></span>type</span> and <span class='texttt'>mapped_<span class='shy'></span>container_<span class='shy'></span>type</span> arguments with
containers of different sizes is undefined<a class='hidden_link' href='#flat.map.overview-9.sentence-1'>.</a></div></div></div><div class='para' id='flat.map.overview-10'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.overview-10'>10</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L15846'>#</a></div><div class='texpara'><div id='flat.map.overview-10.sentence-1' class='sentence'>The effect of calling a constructor or member function
that takes a <span class='texttt'>sorted_<span class='shy'></span>unique_<span class='shy'></span>t</span> argument with
a container, containers, or range
that is not sorted with respect to <span class='texttt'>key_<span class='shy'></span>comp<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>, or
that contains equal elements,
is undefined<a class='hidden_link' href='#flat.map.overview-10.sentence-1'>.</a></div></div></div>

<div class='para added' id=''><div class='marginalizedparent'><a class='marginalized' href='#flat.map.overview-11'>11</a></div><div class='sourceLinkParent'><a class='sourceLink' href=''>#</a></div>
<div class='texpara'>The types <span class="texttt">iterator</span> and <span class="texttt">const_iterator</span> meet the constexpr iterator requirements (<a href="iterator.requirements.general" title="25.3.1 General">[iterator.<span class="shy"></span>requirements.<span class="shy"></span>general]</a>).</div></div>

</div>


<div id='flat.map.defn' class='section'><h4 ><a class='secnum' href='#flat.map.defn' style='min-width:95pt'>24.6.9.2</a> Definition <a class='abbr_ref' href='flat.map.defn'>[flat.map.defn]</a></h4><div class='texpara'><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> KeyContainer <span class='operator'>=</span> vector<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>, <span class='keyword'>class</span> MappedContainer <span class='operator'>=</span> vector<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> flat_map <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> key_type               <span class='operator'>=</span> Key;
    <span class='keyword'>using</span> mapped_type            <span class='operator'>=</span> T;
    <span class='keyword'>using</span> value_type             <span class='operator'>=</span> pair<span class='anglebracket'>&lt;</span>key_type, mapped_type<span class='anglebracket'>&gt;</span>;
    <span class='keyword'>using</span> key_compare            <span class='operator'>=</span> Compare;
    <span class='keyword'>using</span> reference              <span class='operator'>=</span> pair<span class='anglebracket'>&lt;</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span>, mapped_type<span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span>;
    <span class='keyword'>using</span> const_reference        <span class='operator'>=</span> pair<span class='anglebracket'>&lt;</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span>, <span class='keyword'>const</span> mapped_type<span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span>;
    <span class='keyword'>using</span> size_type              <span class='operator'>=</span> size_t;
    <span class='keyword'>using</span> difference_type        <span class='operator'>=</span> ptrdiff_t;
    <span class='keyword'>using</span> iterator               <span class='operator'>=</span> <a class='index' id=':type_of_flat_map::iterator'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> const_iterator         <span class='operator'>=</span> <a class='index' id=':type_of_flat_map::const_iterator'></a><i >implementation-defined</i>; <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> reverse_iterator       <span class='operator'>=</span> std<span class='operator'>::</span>reverse_iterator<span class='anglebracket'>&lt;</span>iterator<span class='anglebracket'>&gt;</span>;
    <span class='keyword'>using</span> const_reverse_iterator <span class='operator'>=</span> std<span class='operator'>::</span>reverse_iterator<span class='anglebracket'>&lt;</span>const_iterator<span class='anglebracket'>&gt;</span>;
    <span class='keyword'>using</span> key_container_type     <span class='operator'>=</span> KeyContainer;
    <span class='keyword'>using</span> mapped_container_type  <span class='operator'>=</span> MappedContainer;

    <span class='keyword'>class</span> value_compare <span class='curlybracket'>{</span>
    <span class='keyword'>private</span><span class='operator'>:</span>
      key_compare comp;                                 <span class='comment'>// <i >exposition only</i></span>
      <span class="keyword added">constexpr</span> value_compare<span class='parenthesis'>(</span>key_compare c<span class='parenthesis'>)</span> <span class='operator'>:</span> comp<span class='parenthesis'>(</span>c<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>        <span class='comment'>// <i >exposition only</i></span>

    <span class='keyword'>public</span><span class='operator'>:</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>const_reference x, const_reference y<span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='curlybracket'>{</span>
        <span class='keyword'>return</span> comp<span class='parenthesis'>(</span>x<span class='operator'>.</span>first, y<span class='operator'>.</span>first<span class='parenthesis'>)</span>;
      <span class='curlybracket'>}</span>
    <span class='curlybracket'>}</span>;

    <span class='keyword'>struct</span> containers <span class='curlybracket'>{</span>
      key_container_type keys;
      mapped_container_type values;
    <span class='curlybracket'>}</span>;

    <span class='comment'>// <a href='#flat.map.cons' title='24.6.9.3&emsp;Constructors'>[flat.<span class='shy'></span>map.<span class='shy'></span>cons]</a>, constructors</span>
    <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>:</span> flat_map<span class='parenthesis'>(</span>key_compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>

    <span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> flat_map<span class='parenthesis'>(</span><span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp<span class='parenthesis'>)</span>
      <span class='operator'>:</span> c<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, compare<span class='parenthesis'>(</span>comp<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>

    <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span>key_container_type key_cont, mapped_container_type mapped_cont,
             <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> key_compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span>sorted_unique_t, key_container_type key_cont, mapped_container_type mapped_cont,
             <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> key_compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;

    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span>InputIterator first, InputIterator last, <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> key_compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
        <span class='operator'>:</span> c<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, compare<span class='parenthesis'>(</span>comp<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> insert<span class='parenthesis'>(</span>first, last<span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>

    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span>sorted_unique_t s, InputIterator first, InputIterator last,
               <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> key_compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
        <span class='operator'>:</span> c<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, compare<span class='parenthesis'>(</span>comp<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> insert<span class='parenthesis'>(</span>s, first, last<span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>

    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range________________________________________________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span>from_range_t fr, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>
        <span class='operator'>:</span> flat_map<span class='parenthesis'>(</span>fr, std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>rg<span class='parenthesis'>)</span>, key_compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range_________________________________________________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp<span class='parenthesis'>)</span>
        <span class='operator'>:</span> flat_map<span class='parenthesis'>(</span>comp<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> insert_range<span class='parenthesis'>(</span>std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>rg<span class='parenthesis'>)</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>

    <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il, <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> key_compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
        <span class='operator'>:</span> flat_map<span class='parenthesis'>(</span>il<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, il<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, comp<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>

    <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span>sorted_unique_t s, initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il,
             <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> key_compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
        <span class='operator'>:</span> flat_map<span class='parenthesis'>(</span>s, il<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, il<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, comp<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>

    <span class='comment'>// <a href='#flat.map.cons.alloc' title='24.6.9.4&emsp;Constructors with allocators'>[flat.<span class='shy'></span>map.<span class='shy'></span>cons.<span class='shy'></span>alloc]</a>, constructors with allocators</span>

    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> flat_map<span class='parenthesis'>(</span><span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span><span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span><span class='keyword'>const</span> key_container_type<span class='operator'>&amp;</span> key_cont, <span class='keyword'>const</span> mapped_container_type<span class='operator'>&amp;</span> mapped_cont,
               <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span><span class='keyword'>const</span> key_container_type<span class='operator'>&amp;</span> key_cont, <span class='keyword'>const</span> mapped_container_type<span class='operator'>&amp;</span> mapped_cont,
               <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span>sorted_unique_t, <span class='keyword'>const</span> key_container_type<span class='operator'>&amp;</span> key_cont,
               <span class='keyword'>const</span> mapped_container_type<span class='operator'>&amp;</span> mapped_cont, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span>sorted_unique_t, <span class='keyword'>const</span> key_container_type<span class='operator'>&amp;</span> key_cont,
               <span class='keyword'>const</span> mapped_container_type<span class='operator'>&amp;</span> mapped_cont,
               <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span><span class='keyword'>const</span> flat_map<span class='operator'>&amp;</span>, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span>flat_map<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span>InputIterator first, InputIterator last, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span>InputIterator first, InputIterator last,
               <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span>sorted_unique_t, InputIterator first, InputIterator last, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span>sorted_unique_t, InputIterator first, InputIterator last,
               <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range__________________________________________________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range___________________________________________________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il, <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span>sorted_unique_t, initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span>sorted_unique_t, initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il,
               <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> flat_map<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;

    <span class='comment'>// iterators</span>
    <span class="keyword added">constexpr</span> iterator               begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator         begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> iterator               end<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator         end<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class="keyword added">constexpr</span> reverse_iterator       rbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_reverse_iterator rbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> reverse_iterator       rend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_reverse_iterator rend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class="keyword added">constexpr</span> const_iterator         cbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator         cend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_reverse_iterator crbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_reverse_iterator crend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// <a href='#flat.map.capacity' title='24.6.9.5&emsp;Capacity'>[flat.<span class='shy'></span>map.<span class='shy'></span>capacity]</a>, capacity</span>
    <span class='squarebracket'>[</span><span class='squarebracket'>[</span>nodiscard<span class='squarebracket'>]</span><span class='squarebracket'>]</span> <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> size_type size<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> size_type max_size<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// <a href='#flat.map.access' title='24.6.9.6&emsp;Access'>[flat.<span class='shy'></span>map.<span class='shy'></span>access]</a>, element access</span>
    <span class="keyword added">constexpr</span> mapped_type<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='squarebracket'>[</span><span class='squarebracket'>]</span><span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> mapped_type<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='squarebracket'>[</span><span class='squarebracket'>]</span><span class='parenthesis'>(</span>key_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> mapped_type<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='squarebracket'>[</span><span class='squarebracket'>]</span><span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> mapped_type<span class='operator'>&amp;</span> at<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>const</span> mapped_type<span class='operator'>&amp;</span> at<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> mapped_type<span class='operator'>&amp;</span> at<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> <span class='keyword'>const</span> mapped_type<span class='operator'>&amp;</span> at<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// <a href='#flat.map.modifiers' title='24.6.9.7&emsp;Modifiers'>[flat.<span class='shy'></span>map.<span class='shy'></span>modifiers]</a>, modifiers</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> emplace<span class='parenthesis'>(</span>Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> iterator emplace_hint<span class='parenthesis'>(</span>const_iterator position, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> insert<span class='parenthesis'>(</span><span class='keyword'>const</span> value_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>
      <span class='curlybracket'>{</span> <span class='keyword'>return</span> emplace<span class='parenthesis'>(</span>x<span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> insert<span class='parenthesis'>(</span>value_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>
      <span class='curlybracket'>{</span> <span class='keyword'>return</span> emplace<span class='parenthesis'>(</span>std<span class='operator'>::</span>move<span class='parenthesis'>(</span>x<span class='parenthesis'>)</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, <span class='keyword'>const</span> value_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>
      <span class='curlybracket'>{</span> <span class='keyword'>return</span> emplace_hint<span class='parenthesis'>(</span>position, x<span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, value_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>
      <span class='curlybracket'>{</span> <span class='keyword'>return</span> emplace_hint<span class='parenthesis'>(</span>position, std<span class='operator'>::</span>move<span class='parenthesis'>(</span>x<span class='parenthesis'>)</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>

    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> P<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> insert<span class='parenthesis'>(</span>P<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> P<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, P<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert<span class='parenthesis'>(</span>InputIterator first, InputIterator last<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert<span class='parenthesis'>(</span>sorted_unique_t, InputIterator first, InputIterator last<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range____________________________________________________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert_range<span class='parenthesis'>(</span>R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il<span class='parenthesis'>)</span>
      <span class='curlybracket'>{</span> insert<span class='parenthesis'>(</span>il<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, il<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert<span class='parenthesis'>(</span>sorted_unique_t s, initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il<span class='parenthesis'>)</span>
      <span class='curlybracket'>{</span> insert<span class='parenthesis'>(</span>s, il<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, il<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>

    <span class="keyword added">constexpr</span> containers extract<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> replace<span class='parenthesis'>(</span>key_container_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> key_cont, mapped_container_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> mapped_cont<span class='parenthesis'>)</span>;

    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> try_emplace<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> try_emplace<span class='parenthesis'>(</span>key_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K, <span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> try_emplace<span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> iterator try_emplace<span class='parenthesis'>(</span>const_iterator hint, <span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> iterator try_emplace<span class='parenthesis'>(</span>const_iterator hint, key_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K, <span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> iterator try_emplace<span class='parenthesis'>(</span>const_iterator hint, K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> M<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> insert_or_assign<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k, M<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> M<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> insert_or_assign<span class='parenthesis'>(</span>key_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, M<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K, <span class='keyword'>class</span> M<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> insert_or_assign<span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, M<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> M<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> iterator insert_or_assign<span class='parenthesis'>(</span>const_iterator hint, <span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k, M<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> M<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> iterator insert_or_assign<span class='parenthesis'>(</span>const_iterator hint, key_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, M<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K, <span class='keyword'>class</span> M<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> iterator insert_or_assign<span class='parenthesis'>(</span>const_iterator hint, K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, M<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> iterator erase<span class='parenthesis'>(</span>iterator position<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator erase<span class='parenthesis'>(</span>const_iterator position<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> size_type erase<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> size_type erase<span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator erase<span class='parenthesis'>(</span>const_iterator first, const_iterator last<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> swap<span class='parenthesis'>(</span>flat_map<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> clear<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// observers</span>
    <span class="keyword added">constexpr</span> key_compare key_comp<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> value_compare value_comp<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="keyword added">constexpr</span> <span class='keyword'>const</span> key_container_type<span class='operator'>&amp;</span> keys<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>      <span class='curlybracket'>{</span> <span class='keyword'>return</span> c<span class='operator'>.</span>keys; <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>const</span> mapped_container_type<span class='operator'>&amp;</span> values<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span> <span class='curlybracket'>{</span> <span class='keyword'>return</span> c<span class='operator'>.</span>values; <span class='curlybracket'>}</span>

    <span class='comment'>// map operations</span>
    <span class="keyword added">constexpr</span> iterator find<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> const_iterator find<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator find<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> const_iterator find<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="keyword added">constexpr</span> size_type count<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> size_type count<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> contains<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> contains<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="keyword added">constexpr</span> iterator lower_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> const_iterator lower_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator lower_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> const_iterator lower_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="keyword added">constexpr</span> iterator upper_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> const_iterator upper_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator upper_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> const_iterator upper_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, iterator<span class='anglebracket'>&gt;</span> equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>const_iterator, const_iterator<span class='anglebracket'>&gt;</span> equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, iterator<span class='anglebracket'>&gt;</span> equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>const_iterator, const_iterator<span class='anglebracket'>&gt;</span> equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="keyword added">constexpr</span> <span class='keyword'>friend</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> flat_map<span class='operator'>&amp;</span> x, <span class='keyword'>const</span> flat_map<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> <span class='keyword'>friend</span> <i >synth-three-way-result</i><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span>
      <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='operator'>=</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='keyword'>const</span> flat_map<span class='operator'>&amp;</span> x, <span class='keyword'>const</span> flat_map<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> <span class='keyword'>friend</span> <span class='keyword'>void</span> swap<span class='parenthesis'>(</span>flat_map<span class='operator'>&amp;</span> x, flat_map<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>
      <span class='curlybracket'>{</span> x<span class='operator'>.</span>swap<span class='parenthesis'>(</span>y<span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>

  <span class='keyword'>private</span><span class='operator'>:</span>
    containers c;               <span class='comment'>// <i >exposition only</i></span>
    key_compare compare;        <span class='comment'>// <i >exposition only</i></span>

    <span class='keyword'>struct</span> key_equiv <span class='curlybracket'>{</span>  <span class='comment'>// <i >exposition only</i></span>
      <span class="keyword added">constexpr</span> key_equiv<span class='parenthesis'>(</span>key_compare c<span class='parenthesis'>)</span> <span class='operator'>:</span> comp<span class='parenthesis'>(</span>c<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>const_reference x, const_reference y<span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='curlybracket'>{</span>
        <span class='keyword'>return</span> <span class='operator'>!</span>comp<span class='parenthesis'>(</span>x<span class='operator'>.</span>first, y<span class='operator'>.</span>first<span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='operator'>!</span>comp<span class='parenthesis'>(</span>y<span class='operator'>.</span>first, x<span class='operator'>.</span>first<span class='parenthesis'>)</span>;
      <span class='curlybracket'>}</span>
      key_compare comp;
    <span class='curlybracket'>}</span>;
  <span class='curlybracket'>}</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> KeyContainer, <span class='keyword'>class</span> MappedContainer,
           <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>value_type<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    flat_map<span class='parenthesis'>(</span>KeyContainer, MappedContainer, Compare <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_map<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>value_type, <span class='keyword'>typename</span> MappedContainer<span class='operator'>::</span>value_type,
                  Compare, KeyContainer, MappedContainer<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> KeyContainer, <span class='keyword'>class</span> MappedContainer, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    flat_map<span class='parenthesis'>(</span>KeyContainer, MappedContainer, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_map<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>value_type, <span class='keyword'>typename</span> MappedContainer<span class='operator'>::</span>value_type,
                  less<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>value_type<span class='anglebracket'>&gt;</span>, KeyContainer, MappedContainer<span class='anglebracket'>&gt;</span>;
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> KeyContainer, <span class='keyword'>class</span> MappedContainer, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    flat_map<span class='parenthesis'>(</span>KeyContainer, MappedContainer, Compare, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_map<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>value_type, <span class='keyword'>typename</span> MappedContainer<span class='operator'>::</span>value_type,
                  Compare, KeyContainer, MappedContainer<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> KeyContainer, <span class='keyword'>class</span> MappedContainer,
           <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>value_type<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    flat_map<span class='parenthesis'>(</span>sorted_unique_t, KeyContainer, MappedContainer, Compare <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_map<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>value_type, <span class='keyword'>typename</span> MappedContainer<span class='operator'>::</span>value_type,
                  Compare, KeyContainer, MappedContainer<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> KeyContainer, <span class='keyword'>class</span> MappedContainer, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    flat_map<span class='parenthesis'>(</span>sorted_unique_t, KeyContainer, MappedContainer, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_map<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>value_type, <span class='keyword'>typename</span> MappedContainer<span class='operator'>::</span>value_type,
                  less<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>value_type<span class='anglebracket'>&gt;</span>, KeyContainer, MappedContainer<span class='anglebracket'>&gt;</span>;
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> KeyContainer, <span class='keyword'>class</span> MappedContainer, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    flat_map<span class='parenthesis'>(</span>sorted_unique_t, KeyContainer, MappedContainer, Compare, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_map<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>value_type, <span class='keyword'>typename</span> MappedContainer<span class='operator'>::</span>value_type,
                  Compare, KeyContainer, MappedContainer<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span><i >iter-key-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    flat_map<span class='parenthesis'>(</span>InputIterator, InputIterator, Compare <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_map<span class='anglebracket'>&lt;</span><i >iter-key-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>, <i >iter-mapped-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>, Compare<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span><i >iter-key-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    flat_map<span class='parenthesis'>(</span>sorted_unique_t, InputIterator, InputIterator, Compare <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_map<span class='anglebracket'>&lt;</span><i >iter-key-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>, <i >iter-mapped-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>, Compare<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range_______________________________________'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span><i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span>byte<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    flat_map<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, Compare <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, Allocator <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_map<span class='anglebracket'>&lt;</span><i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, <i >range-mapped-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, Compare,
                  vector<span class='anglebracket'>&lt;</span><i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, <i >alloc-rebind</i><span class='anglebracket'>&lt;</span>Allocator, <i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
                  vector<span class='anglebracket'>&lt;</span><i >range-mapped-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, <i >alloc-rebind</i><span class='anglebracket'>&lt;</span>Allocator, <i >range-mapped-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range________________________________________'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    flat_map<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_map<span class='anglebracket'>&lt;</span><i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, <i >range-mapped-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, less<span class='anglebracket'>&lt;</span><i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
                  vector<span class='anglebracket'>&lt;</span><i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, <i >alloc-rebind</i><span class='anglebracket'>&lt;</span>Allocator, <i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
                  vector<span class='anglebracket'>&lt;</span><i >range-mapped-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, <i >alloc-rebind</i><span class='anglebracket'>&lt;</span>Allocator, <i >range-mapped-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    flat_map<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>pair<span class='anglebracket'>&lt;</span>Key, T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>, Compare <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_map<span class='anglebracket'>&lt;</span>Key, T, Compare<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    flat_map<span class='parenthesis'>(</span>sorted_unique_t, initializer_list<span class='anglebracket'>&lt;</span>pair<span class='anglebracket'>&lt;</span>Key, T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>, Compare <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
        <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_map<span class='anglebracket'>&lt;</span>Key, T, Compare<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> KeyContainer, <span class='keyword'>class</span> MappedContainer,
            <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    <span class='keyword'>struct</span> uses_allocator<span class='anglebracket'>&lt;</span>flat_map<span class='anglebracket'>&lt;</span>Key, T, Compare, KeyContainer, MappedContainer<span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>
      <span class='operator'>:</span> bool_constant<span class='anglebracket'>&lt;</span>uses_allocator_v<span class='anglebracket'>&lt;</span>KeyContainer, Allocator<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
                      uses_allocator_v<span class='anglebracket'>&lt;</span>MappedContainer, Allocator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></div><div class='para' id='flat.map.defn-1'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.defn-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16196'>#</a></div><div class='texpara'><div id='flat.map.defn-1.sentence-1' class='sentence'>The member type <span class='texttt'>containers</span> has the data members and special members
specified above<a class='hidden_link' href='#flat.map.defn-1.sentence-1'>.</a></div> <div id='flat.map.defn-1.sentence-2' class='sentence'>It has no base classes or members other than those specified<a class='hidden_link' href='#flat.map.defn-1.sentence-2'>.</a></div></div></div></div><div id='flat.map.cons' class='section'><h4 ><a class='secnum' href='#flat.map.cons' style='min-width:95pt'>24.6.9.3</a> Constructors <a class='abbr_ref' href='flat.map.cons'>[flat.map.cons]</a></h4><div class='texpara'><div id='lib:flat_map,constructor'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:flat_map,constructor'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span>key_container_type key_cont, mapped_container_type mapped_cont,
         <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> key_compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='flat.map.cons-1'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.cons-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16210'>#</a></div><div class='texpara'><div id='flat.map.cons-1.sentence-1' class='sentence'><i >Effects</i>: Initializes
<span class='texttt'>c<span class='operator'>.</span>keys</span> with <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>move<span class='parenthesis'>(</span>key_<span class='shy'></span>cont<span class='parenthesis'>)</span></span>,
<span class='texttt'>c<span class='operator'>.</span>values</span> with <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>move<span class='parenthesis'>(</span>mapped_<span class='shy'></span>cont<span class='parenthesis'>)</span></span>, and
<span class='texttt'>compare</span> with <span class='texttt'>comp</span>;
sorts the range [<span class='texttt'>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, end<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>) with respect to <span class='texttt'>value_<span class='shy'></span>comp<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>; and
finally erases the duplicate elements as if by:
<span class='codeblock'><span class='keyword'>auto</span> zv <span class='operator'>=</span> views<span class='operator'>::</span>zip<span class='parenthesis'>(</span>c<span class='operator'>.</span>keys, c<span class='operator'>.</span>values<span class='parenthesis'>)</span>;
<span class='keyword'>auto</span> it <span class='operator'>=</span> ranges<span class='operator'>::</span>unique<span class='parenthesis'>(</span>zv, key_equiv<span class='parenthesis'>(</span>compare<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
<span class='keyword'>auto</span> dist <span class='operator'>=</span> distance<span class='parenthesis'>(</span>zv<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, it<span class='parenthesis'>)</span>;
c<span class='operator'>.</span>keys<span class='operator'>.</span>erase<span class='parenthesis'>(</span>c<span class='operator'>.</span>keys<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>+</span> dist, c<span class='operator'>.</span>keys<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
c<span class='operator'>.</span>values<span class='operator'>.</span>erase<span class='parenthesis'>(</span>c<span class='operator'>.</span>values<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>+</span> dist, c<span class='operator'>.</span>values<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</span></div></div></div></div><div class='para' id='flat.map.cons-2'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.cons-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16226'>#</a></div><div class='texpara'><div id='flat.map.cons-2.sentence-1' class='sentence'><i >Complexity</i>: Linear in <span class='math'><span class='mathalpha'>N</span></span> if the container arguments are already sorted
with respect to <span class='texttt'>value_<span class='shy'></span>comp<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> and otherwise <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.085em;">N</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">log</span></span><span class="mjx-mo"><span class="mjx-char"></span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.085em;">N</span></span></span></span></span></span>,
where <span class='math'><span class='mathalpha'>N</span></span> is the value of <span class='texttt'>key_<span class='shy'></span>cont<span class='operator'>.</span>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> before this call<a class='hidden_link' href='#flat.map.cons-2.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:flat_map,constructor_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:flat_map,constructor_'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span>sorted_unique_t, key_container_type key_cont, mapped_container_type mapped_cont,
         <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> key_compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='flat.map.cons-3'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.cons-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16240'>#</a></div><div class='texpara'><div id='flat.map.cons-3.sentence-1' class='sentence'><i >Effects</i>: Initializes
<span class='texttt'>c<span class='operator'>.</span>keys</span> with <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>move<span class='parenthesis'>(</span>key_<span class='shy'></span>cont<span class='parenthesis'>)</span></span>,
<span class='texttt'>c<span class='operator'>.</span>values</span> with <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>move<span class='parenthesis'>(</span>mapped_<span class='shy'></span>cont<span class='parenthesis'>)</span></span>, and
<span class='texttt'>compare</span> with <span class='texttt'>comp</span><a class='hidden_link' href='#flat.map.cons-3.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.map.cons-4'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.cons-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16247'>#</a></div><div class='texpara'><div id='flat.map.cons-4.sentence-1' class='sentence'><i >Complexity</i>: Constant<a class='hidden_link' href='#flat.map.cons-4.sentence-1'>.</a></div></div></div></div></div><div id='flat.map.cons.alloc' class='section'><h4 ><a class='secnum' href='#flat.map.cons.alloc' style='min-width:95pt'>24.6.9.4</a> Constructors with allocators <a class='abbr_ref' href='flat.map.cons.alloc'>[flat.map.cons.alloc]</a></h4><div class='para' id='flat.map.cons.alloc-1'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.cons.alloc-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16254'>#</a></div><div class='texpara'><div id='flat.map.cons.alloc-1.sentence-1' class='sentence'>The constructors in this subclause shall not participate in overload resolution
unless <span class='texttt'>uses_<span class='shy'></span>allocator_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>key_<span class='shy'></span>container_<span class='shy'></span>type, Alloc<span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>true</span></span>
and <span class='texttt'>uses_<span class='shy'></span>allocator_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>mapped_<span class='shy'></span>container_<span class='shy'></span>type, Alloc<span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#flat.map.cons.alloc-1.sentence-1'>.</a></div></div></div><div class='texpara'><div id='lib:flat_map,constructor__'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:flat_map,constructor__'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span><span class='keyword'>const</span> key_container_type<span class='operator'>&amp;</span> key_cont, <span class='keyword'>const</span> mapped_container_type<span class='operator'>&amp;</span> mapped_cont,
           <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span><span class='keyword'>const</span> key_container_type<span class='operator'>&amp;</span> key_cont, <span class='keyword'>const</span> mapped_container_type<span class='operator'>&amp;</span> mapped_cont,
           <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='flat.map.cons.alloc-2'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.cons.alloc-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16270'>#</a></div><div class='texpara'><div id='flat.map.cons.alloc-2.sentence-1' class='sentence'><i >Effects</i>: Equivalent to <span class='texttt'>flat_<span class='shy'></span>map<span class='parenthesis'>(</span>key_<span class='shy'></span>cont, mapped_<span class='shy'></span>cont<span class='parenthesis'>)</span></span> and
<span class='texttt'>flat_<span class='shy'></span>map<span class='parenthesis'>(</span>key_<span class='shy'></span>cont, mapped_<span class='shy'></span>cont, comp<span class='parenthesis'>)</span></span>, respectively,
except that <span class='texttt'>c<span class='operator'>.</span>keys</span> and <span class='texttt'>c<span class='operator'>.</span>values</span> are constructed with
uses-allocator construction (<a href='allocator.uses.construction' title='20.2.8.2&emsp;Uses-allocator construction'>[allocator.<span class='shy'></span>uses.<span class='shy'></span>construction]</a>)<a class='hidden_link' href='#flat.map.cons.alloc-2.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.map.cons.alloc-3'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.cons.alloc-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16277'>#</a></div><div class='texpara'><div id='flat.map.cons.alloc-3.sentence-1' class='sentence'><i >Complexity</i>: Same as <span class='texttt'>flat_<span class='shy'></span>map<span class='parenthesis'>(</span>key_<span class='shy'></span>cont, mapped_<span class='shy'></span>cont<span class='parenthesis'>)</span></span> and
<span class='texttt'>flat_<span class='shy'></span>map<span class='parenthesis'>(</span>key_<span class='shy'></span>cont, mapped_<span class='shy'></span>cont, comp<span class='parenthesis'>)</span></span>, respectively<a class='hidden_link' href='#flat.map.cons.alloc-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:flat_map,constructor___'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:flat_map,constructor___'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span>sorted_unique_t s, <span class='keyword'>const</span> key_container_type<span class='operator'>&amp;</span> key_cont,
           <span class='keyword'>const</span> mapped_container_type<span class='operator'>&amp;</span> mapped_cont, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span>sorted_unique_t s, <span class='keyword'>const</span> key_container_type<span class='operator'>&amp;</span> key_cont,
           <span class='keyword'>const</span> mapped_container_type<span class='operator'>&amp;</span> mapped_cont, <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp,
           <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='flat.map.cons.alloc-4'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.cons.alloc-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16295'>#</a></div><div class='texpara'><div id='flat.map.cons.alloc-4.sentence-1' class='sentence'><i >Effects</i>: Equivalent to <span class='texttt'>flat_<span class='shy'></span>map<span class='parenthesis'>(</span>s, key_<span class='shy'></span>cont, mapped_<span class='shy'></span>cont<span class='parenthesis'>)</span></span> and
<span class='texttt'>flat_<span class='shy'></span>map<span class='parenthesis'>(</span>s, key_<span class='shy'></span>cont, mapped_<span class='shy'></span>cont, comp<span class='parenthesis'>)</span></span>, respectively,
except that <span class='texttt'>c<span class='operator'>.</span>keys</span> and <span class='texttt'>c<span class='operator'>.</span>values</span> are constructed
with uses-allocator construction (<a href='allocator.uses.construction' title='20.2.8.2&emsp;Uses-allocator construction'>[allocator.<span class='shy'></span>uses.<span class='shy'></span>construction]</a>)<a class='hidden_link' href='#flat.map.cons.alloc-4.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.map.cons.alloc-5'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.cons.alloc-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16302'>#</a></div><div class='texpara'><div id='flat.map.cons.alloc-5.sentence-1' class='sentence'><i >Complexity</i>: Linear<a class='hidden_link' href='#flat.map.cons.alloc-5.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:flat_map,constructor____'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:flat_map,constructor____'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> flat_map<span class='parenthesis'>(</span><span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span><span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span><span class='keyword'>const</span> flat_map<span class='operator'>&amp;</span>, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span>flat_map<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span>InputIterator first, InputIterator last, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span>InputIterator first, InputIterator last, <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span>sorted_unique_t, InputIterator first, InputIterator last, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span>sorted_unique_t, InputIterator first, InputIterator last,
           <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range_____________________________________________________________________________________________________________'><span class='texttt'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range______________________________________________________________________________________________________________'><span class='texttt'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il, <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span>sorted_unique_t, initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_map<span class='parenthesis'>(</span>sorted_unique_t, initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il,
           <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='flat.map.cons.alloc-6'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.cons.alloc-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16342'>#</a></div><div class='texpara'><div id='flat.map.cons.alloc-6.sentence-1' class='sentence'><i >Effects</i>: Equivalent to the corresponding non-allocator constructors
except that <span class='texttt'>c<span class='operator'>.</span>keys</span> and <span class='texttt'>c<span class='operator'>.</span>values</span> are constructed
with uses-allocator construction (<a href='allocator.uses.construction' title='20.2.8.2&emsp;Uses-allocator construction'>[allocator.<span class='shy'></span>uses.<span class='shy'></span>construction]</a>)<a class='hidden_link' href='#flat.map.cons.alloc-6.sentence-1'>.</a></div></div></div></div></div><div id='flat.map.capacity' class='section'><h4 ><a class='secnum' href='#flat.map.capacity' style='min-width:95pt'>24.6.9.5</a> Capacity <a class='abbr_ref' href='flat.map.capacity'>[flat.map.capacity]</a></h4><div class='texpara'><div id='lib:flat_map,size'><div id='lib:size,flat_map'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:size,flat_map'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> size_type size<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
</code></div></div></div></div><div class='para' id='flat.map.capacity-1'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.capacity-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16357'>#</a></div><div class='texpara'><div id='flat.map.capacity-1.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>c<span class='operator'>.</span>keys<span class='operator'>.</span>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#flat.map.capacity-1.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:flat_map,max_size'><div id='lib:max_size,flat_map'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:max_size,flat_map'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> size_type max_size<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
</code></div></div></div></div><div class='para' id='flat.map.capacity-2'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.capacity-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16368'>#</a></div><div class='texpara'><div id='flat.map.capacity-2.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>min<span class='anglebracket'>&lt;</span>size_<span class='shy'></span>type<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>c<span class='operator'>.</span>keys<span class='operator'>.</span>max_<span class='shy'></span>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, c<span class='operator'>.</span>values<span class='operator'>.</span>max_<span class='shy'></span>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#flat.map.capacity-2.sentence-1'>.</a></div></div></div></div></div><div id='flat.map.access' class='section'><h4 ><a class='secnum' href='#flat.map.access' style='min-width:95pt'>24.6.9.6</a> Access <a class='abbr_ref' href='flat.map.access'>[flat.map.access]</a></h4><div class='texpara'><div id='lib:flat_map,operator[]'><div id='lib:operator[],flat_map'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator%5b%5d,flat_map'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> mapped_type<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='squarebracket'>[</span><span class='squarebracket'>]</span><span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='flat.map.access-1'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.access-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16381'>#</a></div><div class='texpara'><div id='flat.map.access-1.sentence-1' class='sentence'><i >Effects</i>: Equivalent to: <span class='texttt'><span class='keyword'>return</span> try_<span class='shy'></span>emplace<span class='parenthesis'>(</span>x<span class='parenthesis'>)</span><span class='operator'>.</span>first<span class='operator'>-</span><span class='anglebracket'>&gt;</span>second;</span></div></div></div></div><div class='texpara'><div id='lib:flat_map,operator[]_'><div id='lib:operator[],flat_map_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator%5b%5d,flat_map_'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> mapped_type<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='squarebracket'>[</span><span class='squarebracket'>]</span><span class='parenthesis'>(</span>key_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='flat.map.access-2'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.access-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16392'>#</a></div><div class='texpara'><div id='flat.map.access-2.sentence-1' class='sentence'><i >Effects</i>: Equivalent to: <span class='texttt'><span class='keyword'>return</span> try_<span class='shy'></span>emplace<span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>move<span class='parenthesis'>(</span>x<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='operator'>.</span>first<span class='operator'>-</span><span class='anglebracket'>&gt;</span>second;</span></div></div></div></div><div class='texpara'><div id='lib:flat_map,operator[]__'><div id='lib:operator[],flat_map__'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator%5b%5d,flat_map__'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> mapped_type<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='squarebracket'>[</span><span class='squarebracket'>]</span><span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='flat.map.access-3'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.access-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16403'>#</a></div><div class='texpara'><div id='flat.map.access-3.sentence-1' class='sentence'><i >Constraints</i>: The <a href='expr.prim.id.qual#nt:qualified-id' title='7.5.5.3&emsp;Qualified names&emsp;[expr.prim.id.qual]'><span id='ntref:qualified-id________________'><span class='textsf'><i >qualified-id</i></span></span></a> <span class='texttt'>Compare<span class='operator'>&#x200b;::&#x200b;</span>is_<span class='shy'></span>transparent</span> is valid and
denotes a type<a class='hidden_link' href='#flat.map.access-3.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.map.access-4'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.access-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16408'>#</a></div><div class='texpara'><div id='flat.map.access-4.sentence-1' class='sentence'><i >Effects</i>: Equivalent to: <span class='texttt'><span class='keyword'>return</span> try_<span class='shy'></span>emplace<span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>K<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>x<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='operator'>.</span>first<span class='operator'>-</span><span class='anglebracket'>&gt;</span>second;</span></div></div></div></div><div class='texpara'><div id='lib:flat_map,at'><div id='lib:at,flat_map'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:at,flat_map'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> mapped_type<span class='operator'>&amp;</span>       at<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
<span class="keyword added">constexpr</span> <span class='keyword'>const</span> mapped_type<span class='operator'>&amp;</span> at<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para' id='flat.map.access-5'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.access-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16420'>#</a></div><div class='texpara'><div id='flat.map.access-5.sentence-1' class='sentence'><i >Returns</i>: A reference to the <span class='texttt'>mapped_<span class='shy'></span>type</span> corresponding
to <span class='texttt'>x</span> in <span class='texttt'><span class='operator'>*</span><span class='keyword'>this</span></span><a class='hidden_link' href='#flat.map.access-5.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.map.access-6'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.access-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16425'>#</a></div><div class='texpara'><div id='flat.map.access-6.sentence-1' class='sentence'><i >Throws</i>: An exception object of type <span class='texttt'>out_<span class='shy'></span>of_<span class='shy'></span>range</span> if
no such element is present<a class='hidden_link' href='#flat.map.access-6.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.map.access-7'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.access-7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16430'>#</a></div><div class='texpara'><div id='flat.map.access-7.sentence-1' class='sentence'><i >Complexity</i>: Logarithmic<a class='hidden_link' href='#flat.map.access-7.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:flat_map,at_'><div id='lib:at,flat_map_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:at,flat_map_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> mapped_type<span class='operator'>&amp;</span>       at<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> <span class='keyword'>const</span> mapped_type<span class='operator'>&amp;</span> at<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para' id='flat.map.access-8'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.access-8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16442'>#</a></div><div class='texpara'><div id='flat.map.access-8.sentence-1' class='sentence'><i >Constraints</i>: The <a href='expr.prim.id.qual#nt:qualified-id' title='7.5.5.3&emsp;Qualified names&emsp;[expr.prim.id.qual]'><span id='ntref:qualified-id_________________'><span class='textsf'><i >qualified-id</i></span></span></a> <span class='texttt'>Compare<span class='operator'>&#x200b;::&#x200b;</span>is_<span class='shy'></span>transparent</span>
is valid and denotes a type<a class='hidden_link' href='#flat.map.access-8.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.map.access-9'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.access-9'>9</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16447'>#</a></div><div class='texpara'><div id='flat.map.access-9.sentence-1' class='sentence'><i >Preconditions</i>: The expression <span class='texttt'>find<span class='parenthesis'>(</span>x<span class='parenthesis'>)</span></span> is well-formed and has well-defined behavior<a class='hidden_link' href='#flat.map.access-9.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.map.access-10'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.access-10'>10</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16451'>#</a></div><div class='texpara'><div id='flat.map.access-10.sentence-1' class='sentence'><i >Returns</i>: A reference to the <span class='texttt'>mapped_<span class='shy'></span>type</span> corresponding to
<span class='texttt'>x</span> in <span class='texttt'><span class='operator'>*</span><span class='keyword'>this</span></span><a class='hidden_link' href='#flat.map.access-10.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.map.access-11'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.access-11'>11</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16456'>#</a></div><div class='texpara'><div id='flat.map.access-11.sentence-1' class='sentence'><i >Throws</i>: An exception object of type <span class='texttt'>out_<span class='shy'></span>of_<span class='shy'></span>range</span>
if no such element is present<a class='hidden_link' href='#flat.map.access-11.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.map.access-12'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.access-12'>12</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16461'>#</a></div><div class='texpara'><div id='flat.map.access-12.sentence-1' class='sentence'><i >Complexity</i>: Logarithmic<a class='hidden_link' href='#flat.map.access-12.sentence-1'>.</a></div></div></div></div></div><div id='flat.map.modifiers' class='section'><h4 ><a class='secnum' href='#flat.map.modifiers' style='min-width:95pt'>24.6.9.7</a> Modifiers <a class='abbr_ref' href='flat.map.modifiers'>[flat.map.modifiers]</a></h4><div class='texpara'><div id='lib:flat_map,emplace'><div id='lib:emplace,flat_map'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:emplace,flat_map'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> emplace<span class='parenthesis'>(</span>Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='flat.map.modifiers-1'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.modifiers-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16474'>#</a></div><div class='texpara'><div id='flat.map.modifiers-1.sentence-1' class='sentence'><i >Constraints</i>: <span class='texttt'>is_<span class='shy'></span>constructible_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>pair<span class='anglebracket'>&lt;</span>key_<span class='shy'></span>type, mapped_<span class='shy'></span>type<span class='anglebracket'>&gt;</span>, Args<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#flat.map.modifiers-1.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.map.modifiers-2'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.modifiers-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16478'>#</a></div><div class='texpara'><div id='flat.map.modifiers-2.sentence-1' class='sentence'><i >Effects</i>: Initializes an object <span class='texttt'>t</span> of type <span class='texttt'>pair<span class='anglebracket'>&lt;</span>key_<span class='shy'></span>type, mapped_<span class='shy'></span>type<span class='anglebracket'>&gt;</span></span>
with <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>Args<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>args<span class='parenthesis'>)</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span></span>;
if the map already contains an element
whose key is equivalent to <span class='texttt'>t<span class='operator'>.</span>first</span>,
<span class='texttt'><span class='operator'>*</span><span class='keyword'>this</span></span> is unchanged<a class='hidden_link' href='#flat.map.modifiers-2.sentence-1'>.</a></div> <div id='flat.map.modifiers-2.sentence-2' class='sentence'>Otherwise, equivalent to:
<span class='codeblock'><span class='keyword'>auto</span> key_it <span class='operator'>=</span> ranges<span class='operator'>::</span>upper_bound<span class='parenthesis'>(</span>c<span class='operator'>.</span>keys, t<span class='operator'>.</span>first, compare<span class='parenthesis'>)</span>;
<span class='keyword'>auto</span> value_it <span class='operator'>=</span> c<span class='operator'>.</span>values<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>+</span> distance<span class='parenthesis'>(</span>c<span class='operator'>.</span>keys<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, key_it<span class='parenthesis'>)</span>;
c<span class='operator'>.</span>keys<span class='operator'>.</span>insert<span class='parenthesis'>(</span>key_it, std<span class='operator'>::</span>move<span class='parenthesis'>(</span>t<span class='operator'>.</span>first<span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
c<span class='operator'>.</span>values<span class='operator'>.</span>insert<span class='parenthesis'>(</span>value_it, std<span class='operator'>::</span>move<span class='parenthesis'>(</span>t<span class='operator'>.</span>second<span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</span></div></div></div></div><div class='para' id='flat.map.modifiers-3'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.modifiers-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16493'>#</a></div><div class='texpara'><div id='flat.map.modifiers-3.sentence-1' class='sentence'><i >Returns</i>: The <span class='texttt'><span class='keyword'>bool</span></span> component of the returned pair is <span class='texttt'><span class='literal'>true</span></span>
if and only if the insertion took place, and
the iterator component of the pair points to
the element with key equivalent to <span class='texttt'>t<span class='operator'>.</span>first</span><a class='hidden_link' href='#flat.map.modifiers-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:flat_map,insert'><div id='lib:insert,flat_map'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:insert,flat_map'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> P<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> insert<span class='parenthesis'>(</span>P<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> P<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, P<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='flat.map.modifiers-4'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.modifiers-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16508'>#</a></div><div class='texpara'><div id='flat.map.modifiers-4.sentence-1' class='sentence'><i >Constraints</i>: <span class='texttt'>is_<span class='shy'></span>constructible_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>pair<span class='anglebracket'>&lt;</span>key_<span class='shy'></span>type, mapped_<span class='shy'></span>type<span class='anglebracket'>&gt;</span>, P<span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#flat.map.modifiers-4.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.map.modifiers-5'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.modifiers-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16512'>#</a></div><div class='texpara'><div id='flat.map.modifiers-5.sentence-1' class='sentence'><i >Effects</i>: The first form is equivalent to <span class='texttt'><span class='keyword'>return</span> emplace<span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>P<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>x<span class='parenthesis'>)</span><span class='parenthesis'>)</span>;</span><a class='hidden_link' href='#flat.map.modifiers-5.sentence-1'>.</a></div> <div id='flat.map.modifiers-5.sentence-2' class='sentence'>The second form is equivalent to
<span class='texttt'><span class='keyword'>return</span> emplace_<span class='shy'></span>hint<span class='parenthesis'>(</span>position, std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>P<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>x<span class='parenthesis'>)</span><span class='parenthesis'>)</span>;</span><a class='hidden_link' href='#flat.map.modifiers-5.sentence-2'>.</a></div></div></div></div><div class='texpara'><div id='lib:flat_map,insert_'><div id='lib:insert,flat_map_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:insert,flat_map_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert<span class='parenthesis'>(</span>InputIterator first, InputIterator last<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='flat.map.modifiers-6'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.modifiers-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16526'>#</a></div><div class='texpara'><div id='flat.map.modifiers-6.sentence-1' class='sentence'><i >Effects</i>: Adds elements to <span class='texttt'>c</span> as if by:
<span class='codeblock'><span class='keyword'>for</span> <span class='parenthesis'>(</span>; first <span class='operator'>!</span><span class='operator'>=</span> last; <span class='operator'>+</span><span class='operator'>+</span>first<span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
  value_type value <span class='operator'>=</span> <span class='operator'>*</span>first;
  c<span class='operator'>.</span>keys<span class='operator'>.</span>insert<span class='parenthesis'>(</span>c<span class='operator'>.</span>keys<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, std<span class='operator'>::</span>move<span class='parenthesis'>(</span>value<span class='operator'>.</span>first<span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
  c<span class='operator'>.</span>values<span class='operator'>.</span>insert<span class='parenthesis'>(</span>c<span class='operator'>.</span>values<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, std<span class='operator'>::</span>move<span class='parenthesis'>(</span>value<span class='operator'>.</span>second<span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
<span class='curlybracket'>}</span>
</span></div> <div id='flat.map.modifiers-6.sentence-2' class='sentence'>
Then, sorts the range of newly inserted elements
with respect to <span class='texttt'>value_<span class='shy'></span>comp<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>;
merges the resulting sorted range and
the sorted range of pre-existing elements into a single sorted range; and
finally erases the duplicate elements as if by:
<span class='codeblock'><span class='keyword'>auto</span> zv <span class='operator'>=</span> views<span class='operator'>::</span>zip<span class='parenthesis'>(</span>c<span class='operator'>.</span>keys, c<span class='operator'>.</span>values<span class='parenthesis'>)</span>;
<span class='keyword'>auto</span> it <span class='operator'>=</span> ranges<span class='operator'>::</span>unique<span class='parenthesis'>(</span>zv, key_equiv<span class='parenthesis'>(</span>compare<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
<span class='keyword'>auto</span> dist <span class='operator'>=</span> distance<span class='parenthesis'>(</span>zv<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, it<span class='parenthesis'>)</span>;
c<span class='operator'>.</span>keys<span class='operator'>.</span>erase<span class='parenthesis'>(</span>c<span class='operator'>.</span>keys<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>+</span> dist, c<span class='operator'>.</span>keys<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
c<span class='operator'>.</span>values<span class='operator'>.</span>erase<span class='parenthesis'>(</span>c<span class='operator'>.</span>values<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>+</span> dist, c<span class='operator'>.</span>values<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</span></div></div></div></div><div class='para' id='flat.map.modifiers-7'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.modifiers-7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16549'>#</a></div><div class='texpara'><div id='flat.map.modifiers-7.sentence-1' class='sentence'><i >Complexity</i>: <span class='math'><span class='mathalpha'>N</span></span> + <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.081em;">M</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">log</span></span><span class="mjx-mo"><span class="mjx-char"></span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.081em;">M</span></span></span></span></span></span>,
where <span class='math'><span class='mathalpha'>N</span></span> is <span class='texttt'>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> before the operation and
<span class='math'><span class='mathalpha'>M</span></span> is <span class='texttt'>distance<span class='parenthesis'>(</span>first, last<span class='parenthesis'>)</span></span><a class='hidden_link' href='#flat.map.modifiers-7.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.map.modifiers-8'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.modifiers-8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16555'>#</a></div><div class='texpara'><div id='flat.map.modifiers-8.sentence-1' class='sentence'><i >Remarks</i>: Since this operation performs an in-place merge, it may allocate memory<a class='hidden_link' href='#flat.map.modifiers-8.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:flat_map,insert__'><div id='lib:insert,flat_map__'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:insert,flat_map__'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert<span class='parenthesis'>(</span>sorted_unique_t, InputIterator first, InputIterator last<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='flat.map.modifiers-9'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.modifiers-9'>9</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16567'>#</a></div><div class='texpara'><div id='flat.map.modifiers-9.sentence-1' class='sentence'><i >Effects</i>: Adds elements to <span class='texttt'>c</span> as if by:
<span class='codeblock'><span class='keyword'>for</span> <span class='parenthesis'>(</span>; first <span class='operator'>!</span><span class='operator'>=</span> last; <span class='operator'>+</span><span class='operator'>+</span>first<span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
  value_type value <span class='operator'>=</span> <span class='operator'>*</span>first;
  c<span class='operator'>.</span>keys<span class='operator'>.</span>insert<span class='parenthesis'>(</span>c<span class='operator'>.</span>keys<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, std<span class='operator'>::</span>move<span class='parenthesis'>(</span>value<span class='operator'>.</span>first<span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
  c<span class='operator'>.</span>values<span class='operator'>.</span>insert<span class='parenthesis'>(</span>c<span class='operator'>.</span>values<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, std<span class='operator'>::</span>move<span class='parenthesis'>(</span>value<span class='operator'>.</span>second<span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
<span class='curlybracket'>}</span>
</span></div> <div id='flat.map.modifiers-9.sentence-2' class='sentence'>
Then, merges the sorted range of newly added elements and
the sorted range of pre-existing elements into a single sorted range; and
finally erases the duplicate elements as if by:
<span class='codeblock'><span class='keyword'>auto</span> zv <span class='operator'>=</span> views<span class='operator'>::</span>zip<span class='parenthesis'>(</span>c<span class='operator'>.</span>keys, c<span class='operator'>.</span>values<span class='parenthesis'>)</span>;
<span class='keyword'>auto</span> it <span class='operator'>=</span> ranges<span class='operator'>::</span>unique<span class='parenthesis'>(</span>zv, key_equiv<span class='parenthesis'>(</span>compare<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
<span class='keyword'>auto</span> dist <span class='operator'>=</span> distance<span class='parenthesis'>(</span>zv<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, it<span class='parenthesis'>)</span>;
c<span class='operator'>.</span>keys<span class='operator'>.</span>erase<span class='parenthesis'>(</span>c<span class='operator'>.</span>keys<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>+</span> dist, c<span class='operator'>.</span>keys<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
c<span class='operator'>.</span>values<span class='operator'>.</span>erase<span class='parenthesis'>(</span>c<span class='operator'>.</span>values<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>+</span> dist, c<span class='operator'>.</span>values<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</span></div></div></div></div><div class='para' id='flat.map.modifiers-10'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.modifiers-10'>10</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16588'>#</a></div><div class='texpara'><div id='flat.map.modifiers-10.sentence-1' class='sentence'><i >Complexity</i>: Linear in <span class='math'><span class='mathalpha'>N</span></span>, where <span class='math'><span class='mathalpha'>N</span></span> is <span class='texttt'>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> after the operation<a class='hidden_link' href='#flat.map.modifiers-10.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.map.modifiers-11'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.modifiers-11'>11</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16592'>#</a></div><div class='texpara'><div id='flat.map.modifiers-11.sentence-1' class='sentence'><i >Remarks</i>: Since this operation performs an in-place merge, it may allocate memory<a class='hidden_link' href='#flat.map.modifiers-11.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:flat_map,insert_range'><div id='lib:insert_range,flat_map'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:insert_range,flat_map'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range_______________________________________________________________________________________________________________'><span class='texttt'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert_range<span class='parenthesis'>(</span>R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='flat.map.modifiers-12'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.modifiers-12'>12</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16604'>#</a></div><div class='texpara'><div id='flat.map.modifiers-12.sentence-1' class='sentence'><i >Effects</i>: Adds elements to <span class='texttt'>c</span> as if by:
<span class='codeblock'><span class='keyword'>for</span> <span class='parenthesis'>(</span><span class='keyword'>const</span> <span class='keyword'>auto</span><span class='operator'>&amp;</span> e <span class='operator'>:</span> rg<span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
  c<span class='operator'>.</span>keys<span class='operator'>.</span>insert<span class='parenthesis'>(</span>c<span class='operator'>.</span>keys<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, e<span class='operator'>.</span>first<span class='parenthesis'>)</span>;
  c<span class='operator'>.</span>values<span class='operator'>.</span>insert<span class='parenthesis'>(</span>c<span class='operator'>.</span>values<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, e<span class='operator'>.</span>second<span class='parenthesis'>)</span>;
<span class='curlybracket'>}</span>
</span></div> <div id='flat.map.modifiers-12.sentence-2' class='sentence'>
Then, sorts the range of newly inserted elements
with respect to <span class='texttt'>value_<span class='shy'></span>comp<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>;
merges the resulting sorted range and
the sorted range of pre-existing elements into a single sorted range; and
finally erases the duplicate elements as if by:
<span class='codeblock'><span class='keyword'>auto</span> zv <span class='operator'>=</span> views<span class='operator'>::</span>zip<span class='parenthesis'>(</span>c<span class='operator'>.</span>keys, c<span class='operator'>.</span>values<span class='parenthesis'>)</span>;
<span class='keyword'>auto</span> it <span class='operator'>=</span> ranges<span class='operator'>::</span>unique<span class='parenthesis'>(</span>zv, key_equiv<span class='parenthesis'>(</span>compare<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
<span class='keyword'>auto</span> dist <span class='operator'>=</span> distance<span class='parenthesis'>(</span>zv<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, it<span class='parenthesis'>)</span>;
c<span class='operator'>.</span>keys<span class='operator'>.</span>erase<span class='parenthesis'>(</span>c<span class='operator'>.</span>keys<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>+</span> dist, c<span class='operator'>.</span>keys<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
c<span class='operator'>.</span>values<span class='operator'>.</span>erase<span class='parenthesis'>(</span>c<span class='operator'>.</span>values<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>+</span> dist, c<span class='operator'>.</span>values<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</span></div></div></div></div><div class='para' id='flat.map.modifiers-13'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.modifiers-13'>13</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16626'>#</a></div><div class='texpara'><div id='flat.map.modifiers-13.sentence-1' class='sentence'><i >Complexity</i>: <span class='math'><span class='mathalpha'>N</span></span> + <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.081em;">M</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">log</span></span><span class="mjx-mo"><span class="mjx-char"></span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.081em;">M</span></span></span></span></span></span>,
where <span class='math'><span class='mathalpha'>N</span></span> is <span class='texttt'>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> before the operation and
<span class='math'><span class='mathalpha'>M</span></span> is <span class='texttt'>ranges<span class='operator'>&#x200b;::&#x200b;</span>distance<span class='parenthesis'>(</span>rg<span class='parenthesis'>)</span></span><a class='hidden_link' href='#flat.map.modifiers-13.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.map.modifiers-14'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.modifiers-14'>14</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16632'>#</a></div><div class='texpara'><div id='flat.map.modifiers-14.sentence-1' class='sentence'><i >Remarks</i>: Since this operation performs an in-place merge, it may allocate memory<a class='hidden_link' href='#flat.map.modifiers-14.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:flat_map,try_emplace'><div id='lib:try_emplace,flat_map'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:try_emplace,flat_map'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> try_emplace<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> try_emplace<span class='parenthesis'>(</span>key_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> iterator try_emplace<span class='parenthesis'>(</span>const_iterator hint, <span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> iterator try_emplace<span class='parenthesis'>(</span>const_iterator hint, key_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='flat.map.modifiers-15'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.modifiers-15'>15</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16650'>#</a></div><div class='texpara'><div id='flat.map.modifiers-15.sentence-1' class='sentence'><i >Constraints</i>: <span class='texttt'>is_<span class='shy'></span>constructible_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>mapped_<span class='shy'></span>type, Args<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#flat.map.modifiers-15.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.map.modifiers-16'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.modifiers-16'>16</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16654'>#</a></div><div class='texpara'><div id='flat.map.modifiers-16.sentence-1' class='sentence'><i >Effects</i>: If the map already contains an element whose key is equivalent to <span class='texttt'>k</span>,
<span class='texttt'><span class='operator'>*</span><span class='keyword'>this</span></span> and <span class='texttt'>args<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span></span> are unchanged<a class='hidden_link' href='#flat.map.modifiers-16.sentence-1'>.</a></div> <div id='flat.map.modifiers-16.sentence-2' class='sentence'>Otherwise equivalent to:
<span class='codeblock'><span class='keyword'>auto</span> key_it <span class='operator'>=</span> ranges<span class='operator'>::</span>upper_bound<span class='parenthesis'>(</span>c<span class='operator'>.</span>keys, k, compare<span class='parenthesis'>)</span>;
<span class='keyword'>auto</span> value_it <span class='operator'>=</span> c<span class='operator'>.</span>values<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>+</span> distance<span class='parenthesis'>(</span>c<span class='operator'>.</span>keys<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, key_it<span class='parenthesis'>)</span>;
c<span class='operator'>.</span>keys<span class='operator'>.</span>insert<span class='parenthesis'>(</span>key_it, std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>k<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>k<span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
c<span class='operator'>.</span>values<span class='operator'>.</span>emplace<span class='parenthesis'>(</span>value_it, std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>Args<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>args<span class='parenthesis'>)</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span>;
</span></div></div></div></div><div class='para' id='flat.map.modifiers-17'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.modifiers-17'>17</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16666'>#</a></div><div class='texpara'><div id='flat.map.modifiers-17.sentence-1' class='sentence'><i >Returns</i>: In the first two overloads,
the <span class='texttt'><span class='keyword'>bool</span></span> component of the returned pair is <span class='texttt'><span class='literal'>true</span></span>
if and only if the insertion took place<a class='hidden_link' href='#flat.map.modifiers-17.sentence-1'>.</a></div> <div id='flat.map.modifiers-17.sentence-2' class='sentence'>The returned iterator points to the map element
whose key is equivalent to <span class='texttt'>k</span><a class='hidden_link' href='#flat.map.modifiers-17.sentence-2'>.</a></div></div></div></div><div class='para' id='flat.map.modifiers-18'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.modifiers-18'>18</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16674'>#</a></div><div class='texpara'><div id='flat.map.modifiers-18.sentence-1' class='sentence'><i >Complexity</i>: The same as <span class='texttt'>emplace</span> for the first two overloads, and
the same as <span class='texttt'>emplace_<span class='shy'></span>hint</span> for the last two overloads<a class='hidden_link' href='#flat.map.modifiers-18.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:flat_map,try_emplace_'><div id='lib:try_emplace,flat_map_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:try_emplace,flat_map_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K, <span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> try_emplace<span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K, <span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> iterator try_emplace<span class='parenthesis'>(</span>const_iterator hint, K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='flat.map.modifiers-19'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.modifiers-19'>19</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16689'>#</a></div><div class='texpara'><div id='flat.map.modifiers-19.sentence-1' class='sentence'><i >Constraints</i>: <ul class='itemize'><li id='flat.map.modifiers-19.1'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#flat.map.modifiers-19.1'>(19.1)</a></div><div class='texpara'><div id='flat.map.modifiers-19.1.sentence-1' class='sentence'>The <a href='expr.prim.id.qual#nt:qualified-id' title='7.5.5.3&emsp;Qualified names&emsp;[expr.prim.id.qual]'><span id='ntref:qualified-id__________________'><span class='textsf'><i >qualified-id</i></span></span></a> <span class='texttt'>Compare<span class='operator'>&#x200b;::&#x200b;</span>is_<span class='shy'></span>transparent</span>
is valid and denotes a type<a class='hidden_link' href='#flat.map.modifiers-19.1.sentence-1'>.</a></div></div></li><li id='flat.map.modifiers-19.2'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#flat.map.modifiers-19.2'>(19.2)</a></div><div class='texpara'><div id='flat.map.modifiers-19.2.sentence-1' class='sentence'><span class='texttt'>is_<span class='shy'></span>constructible_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>key_<span class='shy'></span>type, K<span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#flat.map.modifiers-19.2.sentence-1'>.</a></div></div></li><li id='flat.map.modifiers-19.3'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#flat.map.modifiers-19.3'>(19.3)</a></div><div class='texpara'><div id='flat.map.modifiers-19.3.sentence-1' class='sentence'><span class='texttt'>is_<span class='shy'></span>constructible_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>mapped_<span class='shy'></span>type, Args<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#flat.map.modifiers-19.3.sentence-1'>.</a></div></div></li><li id='flat.map.modifiers-19.4'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#flat.map.modifiers-19.4'>(19.4)</a></div><div class='texpara'><div id='flat.map.modifiers-19.4.sentence-1' class='sentence'>For the first overload,
<span class='texttt'>is_<span class='shy'></span>convertible_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, const_<span class='shy'></span>iterator<span class='anglebracket'>&gt;</span></span> and
<span class='texttt'>is_<span class='shy'></span>convertible_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, iterator<span class='anglebracket'>&gt;</span></span> are both <span class='texttt'><span class='literal'>false</span></span><a class='hidden_link' href='#flat.map.modifiers-19.4.sentence-1'>.</a></div></div></li></ul></div></div></div></div><div class='para' id='flat.map.modifiers-20'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.modifiers-20'>20</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16705'>#</a></div><div class='texpara'><div id='flat.map.modifiers-20.sentence-1' class='sentence'><i >Preconditions</i>: The conversion from <span class='texttt'>k</span> into <span class='texttt'>key_<span class='shy'></span>type</span> constructs
an object <span class='texttt'>u</span>,
for which <span class='texttt'>find<span class='parenthesis'>(</span>k<span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> find<span class='parenthesis'>(</span>u<span class='parenthesis'>)</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#flat.map.modifiers-20.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.map.modifiers-21'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.modifiers-21'>21</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16711'>#</a></div><div class='texpara'><div id='flat.map.modifiers-21.sentence-1' class='sentence'><i >Effects</i>: If the map already contains an element whose key is equivalent to <span class='texttt'>k</span>,
<span class='texttt'><span class='operator'>*</span><span class='keyword'>this</span></span> and <span class='texttt'>args<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span></span> are unchanged<a class='hidden_link' href='#flat.map.modifiers-21.sentence-1'>.</a></div> <div id='flat.map.modifiers-21.sentence-2' class='sentence'>Otherwise equivalent to:
<span class='codeblock'><span class='keyword'>auto</span> key_it <span class='operator'>=</span> ranges<span class='operator'>::</span>upper_bound<span class='parenthesis'>(</span>c<span class='operator'>.</span>keys, k, compare<span class='parenthesis'>)</span>;
<span class='keyword'>auto</span> value_it <span class='operator'>=</span> c<span class='operator'>.</span>values<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>+</span> distance<span class='parenthesis'>(</span>c<span class='operator'>.</span>keys<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, key_it<span class='parenthesis'>)</span>;
c<span class='operator'>.</span>keys<span class='operator'>.</span>emplace<span class='parenthesis'>(</span>key_it, std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>K<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>k<span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
c<span class='operator'>.</span>values<span class='operator'>.</span>emplace<span class='parenthesis'>(</span>value_it, std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>Args<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>args<span class='parenthesis'>)</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span>;
</span></div></div></div></div><div class='para' id='flat.map.modifiers-22'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.modifiers-22'>22</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16723'>#</a></div><div class='texpara'><div id='flat.map.modifiers-22.sentence-1' class='sentence'><i >Returns</i>: In the first overload,
the <span class='texttt'><span class='keyword'>bool</span></span> component of the returned pair is <span class='texttt'><span class='literal'>true</span></span>
if and only if the insertion took place<a class='hidden_link' href='#flat.map.modifiers-22.sentence-1'>.</a></div> <div id='flat.map.modifiers-22.sentence-2' class='sentence'>The returned iterator points to the map element
whose key is equivalent to <span class='texttt'>k</span><a class='hidden_link' href='#flat.map.modifiers-22.sentence-2'>.</a></div></div></div></div><div class='para' id='flat.map.modifiers-23'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.modifiers-23'>23</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16731'>#</a></div><div class='texpara'><div id='flat.map.modifiers-23.sentence-1' class='sentence'><i >Complexity</i>: The same as <span class='texttt'>emplace</span> and <span class='texttt'>emplace_<span class='shy'></span>hint</span>, respectively<a class='hidden_link' href='#flat.map.modifiers-23.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:flat_map,insert_or_assign'><div id='lib:insert_or_assign,flat_map'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:insert_or_assign,flat_map'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> M<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> insert_or_assign<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k, M<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> M<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> insert_or_assign<span class='parenthesis'>(</span>key_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, M<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> M<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> iterator insert_or_assign<span class='parenthesis'>(</span>const_iterator hint, <span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> k, M<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> M<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> iterator insert_or_assign<span class='parenthesis'>(</span>const_iterator hint, key_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, M<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='flat.map.modifiers-24'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.modifiers-24'>24</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16749'>#</a></div><div class='texpara'><div id='flat.map.modifiers-24.sentence-1' class='sentence'><i >Constraints</i>: <span class='texttt'>is_<span class='shy'></span>assignable_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>mapped_<span class='shy'></span>type<span class='operator'>&amp;</span>, M<span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>true</span></span> and
<span class='texttt'>is_<span class='shy'></span>constructible_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>mapped_<span class='shy'></span>type, M<span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#flat.map.modifiers-24.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.map.modifiers-25'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.modifiers-25'>25</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16754'>#</a></div><div class='texpara'><div id='flat.map.modifiers-25.sentence-1' class='sentence'><i >Effects</i>: If the map already contains an element <span class='texttt'>e</span>
whose key is equivalent to <span class='texttt'>k</span>,
assigns <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>M<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>obj<span class='parenthesis'>)</span></span> to <span class='texttt'>e<span class='operator'>.</span>second</span><a class='hidden_link' href='#flat.map.modifiers-25.sentence-1'>.</a></div> <div id='flat.map.modifiers-25.sentence-2' class='sentence'>Otherwise, equivalent to
<span class='codeblock'>try_emplace<span class='parenthesis'>(</span>std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>k<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>k<span class='parenthesis'>)</span>, std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>M<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>obj<span class='parenthesis'>)</span><span class='parenthesis'>)</span>
</span>
for the first two overloads or
<span class='codeblock'>try_emplace<span class='parenthesis'>(</span>hint, std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>k<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>k<span class='parenthesis'>)</span>, std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>M<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>obj<span class='parenthesis'>)</span><span class='parenthesis'>)</span>
</span>
for the last two overloads<a class='hidden_link' href='#flat.map.modifiers-25.sentence-2'>.</a></div></div></div></div><div class='para' id='flat.map.modifiers-26'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.modifiers-26'>26</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16769'>#</a></div><div class='texpara'><div id='flat.map.modifiers-26.sentence-1' class='sentence'><i >Returns</i>: In the first two overloads, the <span class='texttt'><span class='keyword'>bool</span></span> component of the returned pair
is <span class='texttt'><span class='literal'>true</span></span> if and only if the insertion took place<a class='hidden_link' href='#flat.map.modifiers-26.sentence-1'>.</a></div> <div id='flat.map.modifiers-26.sentence-2' class='sentence'>The returned
iterator points to the map element whose key is equivalent to <span class='texttt'>k</span><a class='hidden_link' href='#flat.map.modifiers-26.sentence-2'>.</a></div></div></div></div><div class='para' id='flat.map.modifiers-27'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.modifiers-27'>27</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16775'>#</a></div><div class='texpara'><div id='flat.map.modifiers-27.sentence-1' class='sentence'><i >Complexity</i>: The same as <span class='texttt'>emplace</span> for the first two overloads and
the same as <span class='texttt'>emplace_<span class='shy'></span>hint</span> for the last two overloads<a class='hidden_link' href='#flat.map.modifiers-27.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:flat_map,insert_or_assign_'><div id='lib:insert_or_assign,flat_map_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:insert_or_assign,flat_map_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K, <span class='keyword'>class</span> M<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> insert_or_assign<span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, M<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K, <span class='keyword'>class</span> M<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> iterator insert_or_assign<span class='parenthesis'>(</span>const_iterator hint, K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> k, M<span class='operator'>&amp;</span><span class='operator'>&amp;</span> obj<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='flat.map.modifiers-28'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.modifiers-28'>28</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16790'>#</a></div><div class='texpara'><div id='flat.map.modifiers-28.sentence-1' class='sentence'><i >Constraints</i>: <ul class='itemize'><li id='flat.map.modifiers-28.1'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#flat.map.modifiers-28.1'>(28.1)</a></div><div class='texpara'><div id='flat.map.modifiers-28.1.sentence-1' class='sentence'>The <a href='expr.prim.id.qual#nt:qualified-id' title='7.5.5.3&emsp;Qualified names&emsp;[expr.prim.id.qual]'><span id='ntref:qualified-id___________________'><span class='textsf'><i >qualified-id</i></span></span></a> <span class='texttt'>Compare<span class='operator'>&#x200b;::&#x200b;</span>is_<span class='shy'></span>transparent</span>
is valid and denotes a type<a class='hidden_link' href='#flat.map.modifiers-28.1.sentence-1'>.</a></div></div></li><li id='flat.map.modifiers-28.2'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#flat.map.modifiers-28.2'>(28.2)</a></div><div class='texpara'><div id='flat.map.modifiers-28.2.sentence-1' class='sentence'><span class='texttt'>is_<span class='shy'></span>constructible_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>key_<span class='shy'></span>type, K<span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#flat.map.modifiers-28.2.sentence-1'>.</a></div></div></li><li id='flat.map.modifiers-28.3'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#flat.map.modifiers-28.3'>(28.3)</a></div><div class='texpara'><div id='flat.map.modifiers-28.3.sentence-1' class='sentence'><span class='texttt'>is_<span class='shy'></span>assignable_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>mapped_<span class='shy'></span>type<span class='operator'>&amp;</span>, M<span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#flat.map.modifiers-28.3.sentence-1'>.</a></div></div></li><li id='flat.map.modifiers-28.4'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#flat.map.modifiers-28.4'>(28.4)</a></div><div class='texpara'><div id='flat.map.modifiers-28.4.sentence-1' class='sentence'><span class='texttt'>is_<span class='shy'></span>constructible_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>mapped_<span class='shy'></span>type, M<span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#flat.map.modifiers-28.4.sentence-1'>.</a></div></div></li></ul></div></div></div></div><div class='para' id='flat.map.modifiers-29'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.modifiers-29'>29</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16804'>#</a></div><div class='texpara'><div id='flat.map.modifiers-29.sentence-1' class='sentence'><i >Preconditions</i>: The conversion from <span class='texttt'>k</span> into <span class='texttt'>key_<span class='shy'></span>type</span> constructs
an object <span class='texttt'>u</span>, for which <span class='texttt'>find<span class='parenthesis'>(</span>k<span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> find<span class='parenthesis'>(</span>u<span class='parenthesis'>)</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#flat.map.modifiers-29.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.map.modifiers-30'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.modifiers-30'>30</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16809'>#</a></div><div class='texpara'><div id='flat.map.modifiers-30.sentence-1' class='sentence'><i >Effects</i>: If the map already contains an element <span class='texttt'>e</span>
whose key is equivalent to <span class='texttt'>k</span>,
assigns <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>M<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>obj<span class='parenthesis'>)</span></span> to <span class='texttt'>e<span class='operator'>.</span>second</span><a class='hidden_link' href='#flat.map.modifiers-30.sentence-1'>.</a></div> <div id='flat.map.modifiers-30.sentence-2' class='sentence'>Otherwise, equivalent to
<span class='codeblock'>try_emplace<span class='parenthesis'>(</span>std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>K<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>k<span class='parenthesis'>)</span>, std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>M<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>obj<span class='parenthesis'>)</span><span class='parenthesis'>)</span>
</span>
for the first overload or
<span class='codeblock'>try_emplace<span class='parenthesis'>(</span>hint, std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>K<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>k<span class='parenthesis'>)</span>, std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>M<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>obj<span class='parenthesis'>)</span><span class='parenthesis'>)</span>
</span>
for the second overload<a class='hidden_link' href='#flat.map.modifiers-30.sentence-2'>.</a></div></div></div></div><div class='para' id='flat.map.modifiers-31'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.modifiers-31'>31</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16824'>#</a></div><div class='texpara'><div id='flat.map.modifiers-31.sentence-1' class='sentence'><i >Returns</i>: In the first overload,
the <span class='texttt'><span class='keyword'>bool</span></span> component of the returned pair is <span class='texttt'><span class='literal'>true</span></span>
if and only if the insertion took place<a class='hidden_link' href='#flat.map.modifiers-31.sentence-1'>.</a></div> <div id='flat.map.modifiers-31.sentence-2' class='sentence'>The returned iterator points to the map element
whose key is equivalent to <span class='texttt'>k</span><a class='hidden_link' href='#flat.map.modifiers-31.sentence-2'>.</a></div></div></div></div><div class='para' id='flat.map.modifiers-32'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.modifiers-32'>32</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16832'>#</a></div><div class='texpara'><div id='flat.map.modifiers-32.sentence-1' class='sentence'><i >Complexity</i>: The same as <span class='texttt'>emplace</span> and <span class='texttt'>emplace_<span class='shy'></span>hint</span>, respectively<a class='hidden_link' href='#flat.map.modifiers-32.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:flat_map,swap'><div id='lib:swap,flat_map'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:swap,flat_map'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>void</span> swap<span class='parenthesis'>(</span>flat_map<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
</code></div></div></div></div><div class='para' id='flat.map.modifiers-33'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.modifiers-33'>33</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16843'>#</a></div><div class='texpara'><div id='flat.map.modifiers-33.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'>ranges<span class='operator'>::</span>swap<span class='parenthesis'>(</span>compare, y<span class='operator'>.</span>compare<span class='parenthesis'>)</span>;
ranges<span class='operator'>::</span>swap<span class='parenthesis'>(</span>c<span class='operator'>.</span>keys, y<span class='operator'>.</span>c<span class='operator'>.</span>keys<span class='parenthesis'>)</span>;
ranges<span class='operator'>::</span>swap<span class='parenthesis'>(</span>c<span class='operator'>.</span>values, y<span class='operator'>.</span>c<span class='operator'>.</span>values<span class='parenthesis'>)</span>;
</span></div></div></div></div><div class='texpara'><div id='lib:flat_map,extract'><div id='lib:extract,flat_map'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:extract,flat_map'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> containers extract<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>;
</code></div></div></div></div><div class='para' id='flat.map.modifiers-34'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.modifiers-34'>34</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16859'>#</a></div><div class='texpara'><div id='flat.map.modifiers-34.sentence-1' class='sentence'><i >Postconditions</i>: <span class='texttt'><span class='operator'>*</span><span class='keyword'>this</span></span> is emptied, even if the function exits via an exception<a class='hidden_link' href='#flat.map.modifiers-34.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.map.modifiers-35'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.modifiers-35'>35</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16863'>#</a></div><div class='texpara'><div id='flat.map.modifiers-35.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>move<span class='parenthesis'>(</span>c<span class='parenthesis'>)</span></span><a class='hidden_link' href='#flat.map.modifiers-35.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:flat_map,replace'><div id='lib:replace,flat_map'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:replace,flat_map'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>void</span> replace<span class='parenthesis'>(</span>key_container_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> key_cont, mapped_container_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> mapped_cont<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='flat.map.modifiers-36'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.modifiers-36'>36</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16874'>#</a></div><div class='texpara'><div id='flat.map.modifiers-36.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>key_<span class='shy'></span>cont<span class='operator'>.</span>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> mapped_<span class='shy'></span>cont<span class='operator'>.</span>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> is <span class='texttt'><span class='literal'>true</span></span>,
the elements of <span class='texttt'>key_<span class='shy'></span>cont</span> are sorted with respect to <span class='texttt'>compare</span>, and
<span class='texttt'>key_<span class='shy'></span>cont</span> contains no equal elements<a class='hidden_link' href='#flat.map.modifiers-36.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.map.modifiers-37'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.modifiers-37'>37</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16880'>#</a></div><div class='texpara'><div id='flat.map.modifiers-37.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'>c<span class='operator'>.</span>keys <span class='operator'>=</span> std<span class='operator'>::</span>move<span class='parenthesis'>(</span>key_cont<span class='parenthesis'>)</span>;
c<span class='operator'>.</span>values <span class='operator'>=</span> std<span class='operator'>::</span>move<span class='parenthesis'>(</span>mapped_cont<span class='parenthesis'>)</span>;
</span></div></div></div></div></div><div id='flat.map.erasure' class='section'><h4 ><a class='secnum' href='#flat.map.erasure' style='min-width:95pt'>24.6.9.8</a> Erasure <a class='abbr_ref' href='flat.map.erasure'>[flat.map.erasure]</a></h4><div class='texpara'><div id='lib:flat_map,erase_if'><div id='lib:erase_if,flat_map'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:erase_if,flat_map'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> KeyContainer, <span class='keyword'>class</span> MappedContainer,
         <span class='keyword'>class</span> Predicate<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>typename</span> flat_map<span class='anglebracket'>&lt;</span>Key, T, Compare, KeyContainer, MappedContainer<span class='anglebracket'>&gt;</span><span class='operator'>::</span>size_type
    erase_if<span class='parenthesis'>(</span>flat_map<span class='anglebracket'>&lt;</span>Key, T, Compare, KeyContainer, MappedContainer<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> c, Predicate pred<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='flat.map.erasure-1'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.erasure-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16900'>#</a></div><div class='texpara'><div id='flat.map.erasure-1.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>Key</span> and <span class='texttt'>T</span> meet the <i >Cpp17MoveAssignable</i> requirements<a class='hidden_link' href='#flat.map.erasure-1.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.map.erasure-2'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.erasure-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16904'>#</a></div><div class='texpara'><div id='flat.map.erasure-2.sentence-1' class='sentence'><i >Effects</i>: Let <span class='math'><span class='mathalpha'>E</span></span> be <span class='texttt'><span class='keyword'>bool</span><span class='parenthesis'>(</span>pred<span class='parenthesis'>(</span>pair<span class='anglebracket'>&lt;</span><span class='keyword'>const</span> Key<span class='operator'>&amp;</span>, <span class='keyword'>const</span> T<span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>e<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#flat.map.erasure-2.sentence-1'>.</a></div> <div id='flat.map.erasure-2.sentence-2' class='sentence'>Erases all elements <span class='texttt'>e</span> in <span class='texttt'>c</span> for which <span class='math'><span class='mathalpha'>E</span></span> holds<a class='hidden_link' href='#flat.map.erasure-2.sentence-2'>.</a></div></div></div></div><div class='para' id='flat.map.erasure-3'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.erasure-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16909'>#</a></div><div class='texpara'><div id='flat.map.erasure-3.sentence-1' class='sentence'><i >Returns</i>: The number of elements erased<a class='hidden_link' href='#flat.map.erasure-3.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.map.erasure-4'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.erasure-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16913'>#</a></div><div class='texpara'><div id='flat.map.erasure-4.sentence-1' class='sentence'><i >Complexity</i>: Exactly <span class='texttt'>c<span class='operator'>.</span>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> applications of the predicate<a class='hidden_link' href='#flat.map.erasure-4.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.map.erasure-5'><div class='marginalizedparent'><a class='marginalized' href='#flat.map.erasure-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16917'>#</a></div><div class='texpara'><div id='flat.map.erasure-5.sentence-1' class='sentence'><i >Remarks</i>: Stable (<a href='algorithm.stable' title='16.4.6.8&emsp;Requirements for stable algorithms'>[algorithm.<span class='shy'></span>stable]</a>)<a class='hidden_link' href='#flat.map.erasure-5.sentence-1'>.</a></div> <div id='flat.map.erasure-5.sentence-2' class='sentence'>If an invocation of <span class='texttt'>erase_<span class='shy'></span>if</span> exits via an exception,
<span class='texttt'>c</span> is in a valid but unspecified state (<a href='defns.valid' title='3.65&emsp;valid but unspecified state'>[defns.<span class='shy'></span>valid]</a>)<a class='hidden_link' href='#flat.map.erasure-5.sentence-2'>.</a></div> <div id='flat.map.erasure-note-1' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#flat.map.erasure-note-1'>1</a></i>:&ensp;<div id='flat.map.erasure-5.sentence-3' class='sentence'><span class='texttt'>c</span> still meets its invariants,
but can be empty<a class='hidden_link' href='#flat.map.erasure-5.sentence-3'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div></div></div></div></div><div id='flat.multimap' class='section'><h3 ><a class='secnum' href='#flat.multimap' style='min-width:80pt'>24.6.10</a> Class template <span class='texttt'>flat_<span class='shy'></span>multimap</span> <a class='abbr_ref' href='flat.multimap'>[flat.multimap]</a></h3><div id='flat.multimap.overview' class='section'><h4 ><a class='secnum' href='#flat.multimap.overview' style='min-width:95pt'>24.6.10.1</a> Overview <a class='abbr_ref' href='flat.multimap.overview'>[flat.multimap.overview]</a></h4><div class='para' id='flat.multimap.overview-1'><div class='marginalizedparent'><a class='marginalized' href='#flat.multimap.overview-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16932'>#</a></div><div class='texpara'><div id='flat.multimap.overview-1.sentence-1' class='sentence'><a class='index' id='lib:flat_multimap'></a>A <span class='texttt'>flat_<span class='shy'></span>multimap</span> is a container adaptor
that provides an associative container interface
that supports equivalent keys
(i.e., possibly containing multiple copies of the same key value) and
provides for fast retrieval of values of another type <span class='texttt'>T</span>
based on the keys<a class='hidden_link' href='#flat.multimap.overview-1.sentence-1'>.</a></div> <div id='flat.multimap.overview-1.sentence-2' class='sentence'><span class='texttt'>flat_<span class='shy'></span>multimap</span> supports iterators that meet
the <i >Cpp17InputIterator</i> requirements and
model the
<a href='iterator.concept.random.access#concept:random_access_iterator' title='25.3.4.13&emsp;Concept random_&shy;access_&shy;iterator&emsp;[iterator.concept.random.access]'><span id='conceptref:random_access_iterator_'><span class='texttt'>random_<span class='shy'></span>access_<span class='shy'></span>iterator</span></span></a> concept (<a href='iterator.concept.random.access' title='25.3.4.13&emsp;Concept random_&shy;access_&shy;iterator'>[iterator.<span class='shy'></span>concept.<span class='shy'></span>random.<span class='shy'></span>access]</a>)<a class='hidden_link' href='#flat.multimap.overview-1.sentence-2'>.</a></div></div></div><div class='para' id='flat.multimap.overview-2'><div class='marginalizedparent'><a class='marginalized' href='#flat.multimap.overview-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16945'>#</a></div><div class='texpara'><div id='flat.multimap.overview-2.sentence-1' class='sentence'>A <span class='texttt'>flat_<span class='shy'></span>multimap</span> meets all of the requirements
for a container (<a href='#container.reqmts' title='24.2.2.2&emsp;Container requirements'>[container.<span class='shy'></span>reqmts]</a>) and
for a reversible container (<a href='#container.rev.reqmts' title='24.2.2.3&emsp;Reversible container requirements'>[container.<span class='shy'></span>rev.<span class='shy'></span>reqmts]</a>),
plus the optional container requirements (<a href='#container.opt.reqmts' title='24.2.2.4&emsp;Optional container requirements'>[container.<span class='shy'></span>opt.<span class='shy'></span>reqmts]</a>)<a class='hidden_link' href='#flat.multimap.overview-2.sentence-1'>.</a></div> <div id='flat.multimap.overview-2.sentence-2' class='sentence'><span class='texttt'>flat_<span class='shy'></span>multimap</span> meets the requirements of
an associative container (<a href='#associative.reqmts' title='24.2.7&emsp;Associative containers'>[associative.<span class='shy'></span>reqmts]</a>), except that:
<ul class='itemize'><li id='flat.multimap.overview-2.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#flat.multimap.overview-2.1'>(2.1)</a></div>it does not meet the requirements related to node handles (<a href='#container.node' title='24.2.5&emsp;Node handles'>[container.<span class='shy'></span>node]</a>),</li><li id='flat.multimap.overview-2.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#flat.multimap.overview-2.2'>(2.2)</a></div>it does not meet the requirements related to iterator invalidation, and</li><li id='flat.multimap.overview-2.3'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#flat.multimap.overview-2.3'>(2.3)</a></div>the time complexity of the operations
that insert or erase a single element from the map is linear,
including the ones that take an insertion position iterator<a class='hidden_link' href='#flat.multimap.overview-2.sentence-2'>.</a></li></ul></div> <div id='flat.multimap.overview-note-1' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#flat.multimap.overview-note-1'>1</a></i>:&ensp;<div id='flat.multimap.overview-2.sentence-3' class='sentence'>A <span class='texttt'>flat_<span class='shy'></span>multimap</span> does not meet the additional requirements of an
allocator-aware container (<a href='#container.alloc.reqmts' title='24.2.2.5&emsp;Allocator-aware containers'>[container.<span class='shy'></span>alloc.<span class='shy'></span>reqmts]</a>)<a class='hidden_link' href='#flat.multimap.overview-2.sentence-3'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div></div><div class='para' id='flat.multimap.overview-3'><div class='marginalizedparent'><a class='marginalized' href='#flat.multimap.overview-3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16967'>#</a></div><div class='texpara'><div id='flat.multimap.overview-3.sentence-1' class='sentence'>A <span class='texttt'>flat_<span class='shy'></span>multimap</span> also provides most operations described
in <a href='#associative.reqmts' title='24.2.7&emsp;Associative containers'>[associative.<span class='shy'></span>reqmts]</a> for equal keys<a class='hidden_link' href='#flat.multimap.overview-3.sentence-1'>.</a></div> <div id='flat.multimap.overview-3.sentence-2' class='sentence'>This means that a <span class='texttt'>flat_<span class='shy'></span>multimap</span> supports
the <span class='texttt'>a_<span class='shy'></span>eq</span> operations in <a href='#associative.reqmts' title='24.2.7&emsp;Associative containers'>[associative.<span class='shy'></span>reqmts]</a>
but not the <span class='texttt'>a_<span class='shy'></span>uniq</span> operations<a class='hidden_link' href='#flat.multimap.overview-3.sentence-2'>.</a></div> <div id='flat.multimap.overview-3.sentence-3' class='sentence'>For a <span class='texttt'>flat_<span class='shy'></span>multimap<span class='anglebracket'>&lt;</span>Key, T<span class='anglebracket'>&gt;</span></span>
the <span class='texttt'>key_<span class='shy'></span>type</span> is <span class='texttt'>Key</span> and
the <span class='texttt'>value_<span class='shy'></span>type</span> is <span class='texttt'>pair<span class='anglebracket'>&lt;</span>Key, T<span class='anglebracket'>&gt;</span></span><a class='hidden_link' href='#flat.multimap.overview-3.sentence-3'>.</a></div></div></div><div class='para' id='flat.multimap.overview-4'><div class='marginalizedparent'><a class='marginalized' href='#flat.multimap.overview-4'>4</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16977'>#</a></div><div class='texpara'><div id='flat.multimap.overview-4.sentence-1' class='sentence'>Except as otherwise noted,
operations on <span class='texttt'>flat_<span class='shy'></span>multimap</span> are equivalent to those of <span class='texttt'>flat_<span class='shy'></span>map</span>,
except that <span class='texttt'>flat_<span class='shy'></span>multimap</span> operations
do not remove or replace elements with equal keys<a class='hidden_link' href='#flat.multimap.overview-4.sentence-1'>.</a></div> <div id='flat.multimap.overview-example-1' class='example'><div class='texpara'>[<i>Example&nbsp;<a href='#flat.multimap.overview-example-1'>1</a></i>:&ensp;<div id='flat.multimap.overview-4.sentence-2' class='sentence'><span class='texttt'>flat_<span class='shy'></span>multimap</span> constructors and emplace do not erase
non-unique elements after sorting them<a class='hidden_link' href='#flat.multimap.overview-4.sentence-2'>.</a></div> —&nbsp;<i>end example</i>]</div></div></div></div><div class='para' id='flat.multimap.overview-5'><div class='marginalizedparent'><a class='marginalized' href='#flat.multimap.overview-5'>5</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16987'>#</a></div><div class='texpara'><div id='flat.multimap.overview-5.sentence-1' class='sentence'>A <span class='texttt'>flat_<span class='shy'></span>multimap</span> maintains the following invariants:
<ul class='itemize'><li id='flat.multimap.overview-5.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#flat.multimap.overview-5.1'>(5.1)</a></div>it contains the same number of keys and values;</li><li id='flat.multimap.overview-5.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#flat.multimap.overview-5.2'>(5.2)</a></div>the keys are sorted with respect to the comparison object; and</li><li id='flat.multimap.overview-5.3'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#flat.multimap.overview-5.3'>(5.3)</a></div>the value at offset <span class='texttt'>off</span> within the value container is the value
associated with the key at offset <span class='texttt'>off</span> within the key container<a class='hidden_link' href='#flat.multimap.overview-5.sentence-1'>.</a></li></ul></div></div></div><div class='para' id='flat.multimap.overview-6'><div class='marginalizedparent'><a class='marginalized' href='#flat.multimap.overview-6'>6</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L16999'>#</a></div><div class='texpara'><div id='flat.multimap.overview-6.sentence-1' class='sentence'>If any member function in <a href='#flat.multimap.defn' title='24.6.10.2&emsp;Definition'>[flat.<span class='shy'></span>multimap.<span class='shy'></span>defn]</a> exits via an exception,
the invariants are restored<a class='hidden_link' href='#flat.multimap.overview-6.sentence-1'>.</a></div> <div id='flat.multimap.overview-note-2' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#flat.multimap.overview-note-2'>2</a></i>:&ensp;<div id='flat.multimap.overview-6.sentence-2' class='sentence'>This can result in the <span class='texttt'>flat_<span class='shy'></span>multimap</span> being emptied<a class='hidden_link' href='#flat.multimap.overview-6.sentence-2'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div></div><div class='para' id='flat.multimap.overview-7'><div class='marginalizedparent'><a class='marginalized' href='#flat.multimap.overview-7'>7</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L17006'>#</a></div><div class='texpara'><div id='flat.multimap.overview-7.sentence-1' class='sentence'>Any type <span class='texttt'>C</span>
that meets the sequence container requirements (<a href='#sequence.reqmts' title='24.2.4&emsp;Sequence containers'>[sequence.<span class='shy'></span>reqmts]</a>)
can be used to instantiate <span class='texttt'>flat_<span class='shy'></span>multimap</span>,
as long as
<span class='texttt'>C<span class='operator'>&#x200b;::&#x200b;</span>iterator</span> meets the <i >Cpp17RandomAccessIterator</i> requirements and
invocations of
member functions <span class='texttt'>C<span class='operator'>&#x200b;::&#x200b;</span>size</span> and <span class='texttt'>C<span class='operator'>&#x200b;::&#x200b;</span>max_<span class='shy'></span>size</span> do not exit via an exception<a class='hidden_link' href='#flat.multimap.overview-7.sentence-1'>.</a></div> <div id='flat.multimap.overview-7.sentence-2' class='sentence'>In particular,
<span class='texttt'>vector</span> (<a href='#vector' title='24.3.12&emsp;Class template vector'>[vector]</a>) and <span class='texttt'>deque</span> (<a href='#deque' title='24.3.9&emsp;Class template deque'>[deque]</a>) can be used<a class='hidden_link' href='#flat.multimap.overview-7.sentence-2'>.</a></div> <div id='flat.multimap.overview-note-3' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#flat.multimap.overview-note-3'>3</a></i>:&ensp;<div id='flat.multimap.overview-7.sentence-3' class='sentence'><span class='texttt'>vector<span class='anglebracket'>&lt;</span><span class='keyword'>bool</span><span class='anglebracket'>&gt;</span></span> is not a sequence container<a class='hidden_link' href='#flat.multimap.overview-7.sentence-3'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div></div><div class='para' id='flat.multimap.overview-8'><div class='marginalizedparent'><a class='marginalized' href='#flat.multimap.overview-8'>8</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L17020'>#</a></div><div class='texpara'><div id='flat.multimap.overview-8.sentence-1' class='sentence'>The program is ill-formed if
<span class='texttt'>Key</span> is not the same type as <span class='texttt'>KeyContainer<span class='operator'>&#x200b;::&#x200b;</span>value_<span class='shy'></span>type</span> or
<span class='texttt'>T</span> is not the same type as <span class='texttt'>MappedContainer<span class='operator'>&#x200b;::&#x200b;</span>value_<span class='shy'></span>type</span><a class='hidden_link' href='#flat.multimap.overview-8.sentence-1'>.</a></div></div></div><div class='para' id='flat.multimap.overview-9'><div class='marginalizedparent'><a class='marginalized' href='#flat.multimap.overview-9'>9</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L17025'>#</a></div><div class='texpara'><div id='flat.multimap.overview-9.sentence-1' class='sentence'>The effect of calling a constructor
that takes both <span class='texttt'>key_<span class='shy'></span>container_<span class='shy'></span>type</span> and
<span class='texttt'>mapped_<span class='shy'></span>container_<span class='shy'></span>type</span> arguments
with containers of different sizes is undefined<a class='hidden_link' href='#flat.multimap.overview-9.sentence-1'>.</a></div></div></div><div class='para' id='flat.multimap.overview-10'><div class='marginalizedparent'><a class='marginalized' href='#flat.multimap.overview-10'>10</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L17031'>#</a></div><div class='texpara'><div id='flat.multimap.overview-10.sentence-1' class='sentence'>The effect of calling a constructor or member function
that takes a <span class='texttt'>sorted_<span class='shy'></span>equivalent_<span class='shy'></span>t</span> argument
with a container, containers, or range
that are not sorted with respect to <span class='texttt'>key_<span class='shy'></span>comp<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> is undefined<a class='hidden_link' href='#flat.multimap.overview-10.sentence-1'>.</a></div></div></div>

<div class='para added' id=''><div class='marginalizedparent'><a class='marginalized' href='#flat.multimap.overview-11'>11</a></div><div class='sourceLinkParent'><a class='sourceLink' href=''>#</a></div>
<div class='texpara'>The types <span class="texttt">iterator</span> and <span class="texttt">const_iterator</span> meet the constexpr iterator requirements (<a href="iterator.requirements.general" title="25.3.1 General">[iterator.<span class="shy"></span>requirements.<span class="shy"></span>general]</a>).</div></div>

</div>


<div id='flat.multimap.defn' class='section'><h4 ><a class='secnum' href='#flat.multimap.defn' style='min-width:95pt'>24.6.10.2</a> Definition <a class='abbr_ref' href='flat.multimap.defn'>[flat.multimap.defn]</a></h4><div class='texpara'><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> KeyContainer <span class='operator'>=</span> vector<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>, <span class='keyword'>class</span> MappedContainer <span class='operator'>=</span> vector<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> flat_multimap <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> key_type               <span class='operator'>=</span> Key;
    <span class='keyword'>using</span> mapped_type            <span class='operator'>=</span> T;
    <span class='keyword'>using</span> value_type             <span class='operator'>=</span> pair<span class='anglebracket'>&lt;</span>key_type, mapped_type<span class='anglebracket'>&gt;</span>;
    <span class='keyword'>using</span> key_compare            <span class='operator'>=</span> Compare;
    <span class='keyword'>using</span> reference              <span class='operator'>=</span> pair<span class='anglebracket'>&lt;</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span>, mapped_type<span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span>;
    <span class='keyword'>using</span> const_reference        <span class='operator'>=</span> pair<span class='anglebracket'>&lt;</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span>, <span class='keyword'>const</span> mapped_type<span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span>;
    <span class='keyword'>using</span> size_type              <span class='operator'>=</span> size_t;
    <span class='keyword'>using</span> difference_type        <span class='operator'>=</span> ptrdiff_t;
    <span class='keyword'>using</span> iterator               <span class='operator'>=</span> <a class='index' id=':type_of_flat_multimap::iterator'></a><i >implementation-defined</i>;     <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> const_iterator         <span class='operator'>=</span> <a class='index' id=':type_of_flat_multimap::const_iterator'></a><i >implementation-defined</i>;     <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> reverse_iterator       <span class='operator'>=</span> std<span class='operator'>::</span>reverse_iterator<span class='anglebracket'>&lt;</span>iterator<span class='anglebracket'>&gt;</span>;
    <span class='keyword'>using</span> const_reverse_iterator <span class='operator'>=</span> std<span class='operator'>::</span>reverse_iterator<span class='anglebracket'>&lt;</span>const_iterator<span class='anglebracket'>&gt;</span>;
    <span class='keyword'>using</span> key_container_type     <span class='operator'>=</span> KeyContainer;
    <span class='keyword'>using</span> mapped_container_type  <span class='operator'>=</span> MappedContainer;

    <span class='keyword'>class</span> value_compare <span class='curlybracket'>{</span>
    <span class='keyword'>private</span><span class='operator'>:</span>
      key_compare comp;                                 <span class='comment'>// <i >exposition only</i></span>
      <span class="keyword added">constexpr</span> value_compare<span class='parenthesis'>(</span>key_compare c<span class='parenthesis'>)</span> <span class='operator'>:</span> comp<span class='parenthesis'>(</span>c<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>        <span class='comment'>// <i >exposition only</i></span>

    <span class='keyword'>public</span><span class='operator'>:</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>const_reference x, const_reference y<span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='curlybracket'>{</span>
        <span class='keyword'>return</span> comp<span class='parenthesis'>(</span>x<span class='operator'>.</span>first, y<span class='operator'>.</span>first<span class='parenthesis'>)</span>;
      <span class='curlybracket'>}</span>
    <span class='curlybracket'>}</span>;

    <span class='keyword'>struct</span> containers <span class='curlybracket'>{</span>
      key_container_type keys;
      mapped_container_type values;
    <span class='curlybracket'>}</span>;

    <span class='comment'>// <a href='#flat.multimap.cons' title='24.6.10.3&emsp;Constructors'>[flat.<span class='shy'></span>multimap.<span class='shy'></span>cons]</a>, constructors</span>
    <span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>:</span> flat_multimap<span class='parenthesis'>(</span>key_compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>

    <span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> flat_multimap<span class='parenthesis'>(</span><span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp<span class='parenthesis'>)</span>
      <span class='operator'>:</span> c<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, compare<span class='parenthesis'>(</span>comp<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>

    <span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span>key_container_type key_cont, mapped_container_type mapped_cont,
                  <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> key_compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span>sorted_equivalent_t,
                  key_container_type key_cont, mapped_container_type mapped_cont,
                  <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> key_compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;

    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span>InputIterator first, InputIterator last,
                    <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> key_compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
        <span class='operator'>:</span> c<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, compare<span class='parenthesis'>(</span>comp<span class='parenthesis'>)</span>
        <span class='curlybracket'>{</span> insert<span class='parenthesis'>(</span>first, last<span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>

    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span>sorted_equivalent_t s, InputIterator first, InputIterator last,
                    <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> key_compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
        <span class='operator'>:</span> c<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, compare<span class='parenthesis'>(</span>comp<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> insert<span class='parenthesis'>(</span>s, first, last<span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>

    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range________________________________________________________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span>from_range_t fr, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>
        <span class='operator'>:</span> flat_multimap<span class='parenthesis'>(</span>fr, std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>rg<span class='parenthesis'>)</span>, key_compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range_________________________________________________________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp<span class='parenthesis'>)</span>
        <span class='operator'>:</span> flat_multimap<span class='parenthesis'>(</span>comp<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> insert_range<span class='parenthesis'>(</span>std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>rg<span class='parenthesis'>)</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>

    <span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il, <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> key_compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
        <span class='operator'>:</span> flat_multimap<span class='parenthesis'>(</span>il<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, il<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, comp<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>

    <span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span>sorted_equivalent_t s, initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il,
                  <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> key_compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
        <span class='operator'>:</span> flat_multimap<span class='parenthesis'>(</span>s, il<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, il<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, comp<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>

    <span class='comment'>// <a href='#flat.multimap.cons.alloc' title='24.6.10.4&emsp;Constructors with allocators'>[flat.<span class='shy'></span>multimap.<span class='shy'></span>cons.<span class='shy'></span>alloc]</a>, constructors with allocators</span>

    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> flat_multimap<span class='parenthesis'>(</span><span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span><span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span><span class='keyword'>const</span> key_container_type<span class='operator'>&amp;</span> key_cont, <span class='keyword'>const</span> mapped_container_type<span class='operator'>&amp;</span> mapped_cont,
                    <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span><span class='keyword'>const</span> key_container_type<span class='operator'>&amp;</span> key_cont, <span class='keyword'>const</span> mapped_container_type<span class='operator'>&amp;</span> mapped_cont,
                    <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span>sorted_equivalent_t, <span class='keyword'>const</span> key_container_type<span class='operator'>&amp;</span> key_cont,
                    <span class='keyword'>const</span> mapped_container_type<span class='operator'>&amp;</span> mapped_cont, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span>sorted_equivalent_t, <span class='keyword'>const</span> key_container_type<span class='operator'>&amp;</span> key_cont,
                    <span class='keyword'>const</span> mapped_container_type<span class='operator'>&amp;</span> mapped_cont,
                    <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span><span class='keyword'>const</span> flat_multimap<span class='operator'>&amp;</span>, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span>flat_multimap<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span>InputIterator first, InputIterator last, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span>InputIterator first, InputIterator last,
                    <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span>sorted_equivalent_t, InputIterator first, InputIterator last,
                    <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span>sorted_equivalent_t, InputIterator first, InputIterator last,
                    <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range__________________________________________________________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range___________________________________________________________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il, <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp,
                    <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span>sorted_equivalent_t, initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span>sorted_equivalent_t, initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il,
                    <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> flat_multimap<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;

    <span class='comment'>// iterators</span>
    <span class="keyword added">constexpr</span> iterator               begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator         begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> iterator               end<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator         end<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class="keyword added">constexpr</span> reverse_iterator       rbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_reverse_iterator rbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> reverse_iterator       rend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_reverse_iterator rend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class="keyword added">constexpr</span> const_iterator         cbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator         cend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_reverse_iterator crbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_reverse_iterator crend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// capacity</span>
    <span class='squarebracket'>[</span><span class='squarebracket'>[</span>nodiscard<span class='squarebracket'>]</span><span class='squarebracket'>]</span> <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> size_type size<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> size_type max_size<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// modifiers</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator emplace<span class='parenthesis'>(</span>Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> iterator emplace_hint<span class='parenthesis'>(</span>const_iterator position, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span><span class='keyword'>const</span> value_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>
      <span class='curlybracket'>{</span> <span class='keyword'>return</span> emplace<span class='parenthesis'>(</span>x<span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>value_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>
      <span class='curlybracket'>{</span> <span class='keyword'>return</span> emplace<span class='parenthesis'>(</span>std<span class='operator'>::</span>move<span class='parenthesis'>(</span>x<span class='parenthesis'>)</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, <span class='keyword'>const</span> value_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>
      <span class='curlybracket'>{</span> <span class='keyword'>return</span> emplace_hint<span class='parenthesis'>(</span>position, x<span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, value_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>
      <span class='curlybracket'>{</span> <span class='keyword'>return</span> emplace_hint<span class='parenthesis'>(</span>position, std<span class='operator'>::</span>move<span class='parenthesis'>(</span>x<span class='parenthesis'>)</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>

    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> P<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>P<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> P<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, P<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert<span class='parenthesis'>(</span>InputIterator first, InputIterator last<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert<span class='parenthesis'>(</span>sorted_equivalent_t, InputIterator first, InputIterator last<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range____________________________________________________________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert_range<span class='parenthesis'>(</span>R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il<span class='parenthesis'>)</span>
      <span class='curlybracket'>{</span> insert<span class='parenthesis'>(</span>il<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, il<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert<span class='parenthesis'>(</span>sorted_equivalent_t s, initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il<span class='parenthesis'>)</span>
      <span class='curlybracket'>{</span> insert<span class='parenthesis'>(</span>s, il<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, il<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>

    <span class="keyword added">constexpr</span> containers extract<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> replace<span class='parenthesis'>(</span>key_container_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> key_cont, mapped_container_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> mapped_cont<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> iterator erase<span class='parenthesis'>(</span>iterator position<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator erase<span class='parenthesis'>(</span>const_iterator position<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> size_type erase<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> size_type erase<span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator erase<span class='parenthesis'>(</span>const_iterator first, const_iterator last<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> swap<span class='parenthesis'>(</span>flat_multimap<span class='operator'>&amp;</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> clear<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// observers</span>
    <span class="keyword added">constexpr</span> key_compare key_comp<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> value_compare value_comp<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="keyword added">constexpr</span> <span class='keyword'>const</span> key_container_type<span class='operator'>&amp;</span> keys<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span> <span class='curlybracket'>{</span> <span class='keyword'>return</span> c<span class='operator'>.</span>keys; <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>const</span> mapped_container_type<span class='operator'>&amp;</span> values<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span> <span class='curlybracket'>{</span> <span class='keyword'>return</span> c<span class='operator'>.</span>values; <span class='curlybracket'>}</span>

    <span class='comment'>// map operations</span>
    <span class="keyword added">constexpr</span> iterator find<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> const_iterator find<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator find<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> const_iterator find<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="keyword added">constexpr</span> size_type count<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> size_type count<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> contains<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> contains<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="keyword added">constexpr</span> iterator lower_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> const_iterator lower_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator lower_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> const_iterator lower_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="keyword added">constexpr</span> iterator upper_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> const_iterator upper_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator upper_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> const_iterator upper_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, iterator<span class='anglebracket'>&gt;</span> equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>const_iterator, const_iterator<span class='anglebracket'>&gt;</span> equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, iterator<span class='anglebracket'>&gt;</span> equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>const_iterator, const_iterator<span class='anglebracket'>&gt;</span> equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="keyword added">constexpr</span> <span class='keyword'>friend</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> flat_multimap<span class='operator'>&amp;</span> x, <span class='keyword'>const</span> flat_multimap<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> <span class='keyword'>friend</span> <i >synth-three-way-result</i><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span>
      <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='operator'>=</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='keyword'>const</span> flat_multimap<span class='operator'>&amp;</span> x, <span class='keyword'>const</span> flat_multimap<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> <span class='keyword'>friend</span> <span class='keyword'>void</span> swap<span class='parenthesis'>(</span>flat_multimap<span class='operator'>&amp;</span> x, flat_multimap<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>
      <span class='curlybracket'>{</span> x<span class='operator'>.</span>swap<span class='parenthesis'>(</span>y<span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>

  <span class='keyword'>private</span><span class='operator'>:</span>
    containers c;               <span class='comment'>// <i >exposition only</i></span>
    key_compare compare;        <span class='comment'>// <i >exposition only</i></span>
  <span class='curlybracket'>}</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> KeyContainer, <span class='keyword'>class</span> MappedContainer,
           <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>value_type<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    flat_multimap<span class='parenthesis'>(</span>KeyContainer, MappedContainer, Compare <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_multimap<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>value_type, <span class='keyword'>typename</span> MappedContainer<span class='operator'>::</span>value_type,
                       Compare, KeyContainer, MappedContainer<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> KeyContainer, <span class='keyword'>class</span> MappedContainer, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    flat_multimap<span class='parenthesis'>(</span>KeyContainer, MappedContainer, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_multimap<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>value_type, <span class='keyword'>typename</span> MappedContainer<span class='operator'>::</span>value_type,
                       less<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>value_type<span class='anglebracket'>&gt;</span>, KeyContainer, MappedContainer<span class='anglebracket'>&gt;</span>;
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> KeyContainer, <span class='keyword'>class</span> MappedContainer, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    flat_multimap<span class='parenthesis'>(</span>KeyContainer, MappedContainer, Compare, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_multimap<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>value_type, <span class='keyword'>typename</span> MappedContainer<span class='operator'>::</span>value_type,
                       Compare, KeyContainer, MappedContainer<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> KeyContainer, <span class='keyword'>class</span> MappedContainer,
           <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>value_type<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    flat_multimap<span class='parenthesis'>(</span>sorted_equivalent_t, KeyContainer, MappedContainer, Compare <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_multimap<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>value_type, <span class='keyword'>typename</span> MappedContainer<span class='operator'>::</span>value_type,
                       Compare, KeyContainer, MappedContainer<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> KeyContainer, <span class='keyword'>class</span> MappedContainer, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    flat_multimap<span class='parenthesis'>(</span>sorted_equivalent_t, KeyContainer, MappedContainer, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_multimap<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>value_type, <span class='keyword'>typename</span> MappedContainer<span class='operator'>::</span>value_type,
                       less<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>value_type<span class='anglebracket'>&gt;</span>, KeyContainer, MappedContainer<span class='anglebracket'>&gt;</span>;
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> KeyContainer, <span class='keyword'>class</span> MappedContainer, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    flat_multimap<span class='parenthesis'>(</span>sorted_equivalent_t, KeyContainer, MappedContainer, Compare, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_multimap<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>value_type, <span class='keyword'>typename</span> MappedContainer<span class='operator'>::</span>value_type,
                       Compare, KeyContainer, MappedContainer<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span><i >iter-key-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    flat_multimap<span class='parenthesis'>(</span>InputIterator, InputIterator, Compare <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_multimap<span class='anglebracket'>&lt;</span><i >iter-key-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>, <i >iter-mapped-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>, Compare<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span><i >iter-key-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    flat_multimap<span class='parenthesis'>(</span>sorted_equivalent_t, InputIterator, InputIterator, Compare <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_multimap<span class='anglebracket'>&lt;</span><i >iter-key-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>, <i >iter-mapped-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>, Compare<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range_________________________________________'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span><i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span>byte<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    flat_multimap<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, Compare <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, Allocator <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_multimap<span class='anglebracket'>&lt;</span><i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, <i >range-mapped-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, Compare,
                       vector<span class='anglebracket'>&lt;</span><i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>,
                              <i >alloc-rebind</i><span class='anglebracket'>&lt;</span>Allocator, <i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
                       vector<span class='anglebracket'>&lt;</span><i >range-mapped-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>,
                              <i >alloc-rebind</i><span class='anglebracket'>&lt;</span>Allocator, <i >range-mapped-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range__________________________________________'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    flat_multimap<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_multimap<span class='anglebracket'>&lt;</span><i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, <i >range-mapped-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, less<span class='anglebracket'>&lt;</span><i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
                       vector<span class='anglebracket'>&lt;</span><i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>,
                              <i >alloc-rebind</i><span class='anglebracket'>&lt;</span>Allocator, <i >range-key-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
                       vector<span class='anglebracket'>&lt;</span><i >range-mapped-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>,
                              <i >alloc-rebind</i><span class='anglebracket'>&lt;</span>Allocator, <i >range-mapped-type</i><span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    flat_multimap<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>pair<span class='anglebracket'>&lt;</span>Key, T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>, Compare <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_multimap<span class='anglebracket'>&lt;</span>Key, T, Compare<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    flat_multimap<span class='parenthesis'>(</span>sorted_equivalent_t, initializer_list<span class='anglebracket'>&lt;</span>pair<span class='anglebracket'>&lt;</span>Key, T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>, Compare <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
        <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_multimap<span class='anglebracket'>&lt;</span>Key, T, Compare<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> KeyContainer, <span class='keyword'>class</span> MappedContainer,
            <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    <span class='keyword'>struct</span> uses_allocator<span class='anglebracket'>&lt;</span>flat_multimap<span class='anglebracket'>&lt;</span>Key, T, Compare, KeyContainer, MappedContainer<span class='anglebracket'>&gt;</span>,
                          Allocator<span class='anglebracket'>&gt;</span>
      <span class='operator'>:</span> bool_constant<span class='anglebracket'>&lt;</span>uses_allocator_v<span class='anglebracket'>&lt;</span>KeyContainer, Allocator<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
                      uses_allocator_v<span class='anglebracket'>&lt;</span>MappedContainer, Allocator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></div><div class='para' id='flat.multimap.defn-1'><div class='marginalizedparent'><a class='marginalized' href='#flat.multimap.defn-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L17349'>#</a></div><div class='texpara'><div id='flat.multimap.defn-1.sentence-1' class='sentence'>The member type <span class='texttt'>containers</span> has the data members and special members
specified above<a class='hidden_link' href='#flat.multimap.defn-1.sentence-1'>.</a></div> <div id='flat.multimap.defn-1.sentence-2' class='sentence'>It has no base classes or members other than those
specified<a class='hidden_link' href='#flat.multimap.defn-1.sentence-2'>.</a></div></div></div></div><div id='flat.multimap.cons' class='section'><h4 ><a class='secnum' href='#flat.multimap.cons' style='min-width:95pt'>24.6.10.3</a> Constructors <a class='abbr_ref' href='flat.multimap.cons'>[flat.multimap.cons]</a></h4><div class='texpara'><div id='lib:flat_multimap,constructor'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:flat_multimap,constructor'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span>key_container_type key_cont, mapped_container_type mapped_cont,
              <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> key_compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='flat.multimap.cons-1'><div class='marginalizedparent'><a class='marginalized' href='#flat.multimap.cons-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L17363'>#</a></div><div class='texpara'><div id='flat.multimap.cons-1.sentence-1' class='sentence'><i >Effects</i>: Initializes
<span class='texttt'>c<span class='operator'>.</span>keys</span> with <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>move<span class='parenthesis'>(</span>key_<span class='shy'></span>cont<span class='parenthesis'>)</span></span>,
<span class='texttt'>c<span class='operator'>.</span>values</span> with <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>move<span class='parenthesis'>(</span>mapped_<span class='shy'></span>cont<span class='parenthesis'>)</span></span>, and
<span class='texttt'>compare</span> with <span class='texttt'>comp</span>;
sorts the range [<span class='texttt'>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, end<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>) with respect to <span class='texttt'>value_<span class='shy'></span>comp<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#flat.multimap.cons-1.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.multimap.cons-2'><div class='marginalizedparent'><a class='marginalized' href='#flat.multimap.cons-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L17371'>#</a></div><div class='texpara'><div id='flat.multimap.cons-2.sentence-1' class='sentence'><i >Complexity</i>: Linear in <span class='math'><span class='mathalpha'>N</span></span> if the container arguments are already sorted
with respect to <span class='texttt'>value_<span class='shy'></span>comp<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> and otherwise <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.085em;">N</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">log</span></span><span class="mjx-mo"><span class="mjx-char"></span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.085em;">N</span></span></span></span></span></span>,
where <span class='math'><span class='mathalpha'>N</span></span> is the value of <span class='texttt'>key_<span class='shy'></span>cont<span class='operator'>.</span>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> before this call<a class='hidden_link' href='#flat.multimap.cons-2.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:flat_multimap,constructor_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:flat_multimap,constructor_'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span>sorted_equivalent_t, key_container_type key_cont, mapped_container_type mapped_cont,
              <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> key_compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='flat.multimap.cons-3'><div class='marginalizedparent'><a class='marginalized' href='#flat.multimap.cons-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L17385'>#</a></div><div class='texpara'><div id='flat.multimap.cons-3.sentence-1' class='sentence'><i >Effects</i>: Initializes
<span class='texttt'>c<span class='operator'>.</span>keys</span> with <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>move<span class='parenthesis'>(</span>key_<span class='shy'></span>cont<span class='parenthesis'>)</span></span>,
<span class='texttt'>c<span class='operator'>.</span>values</span> with <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>move<span class='parenthesis'>(</span>mapped_<span class='shy'></span>cont<span class='parenthesis'>)</span></span>, and
<span class='texttt'>compare</span> with <span class='texttt'>comp</span><a class='hidden_link' href='#flat.multimap.cons-3.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.multimap.cons-4'><div class='marginalizedparent'><a class='marginalized' href='#flat.multimap.cons-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L17392'>#</a></div><div class='texpara'><div id='flat.multimap.cons-4.sentence-1' class='sentence'><i >Complexity</i>: Constant<a class='hidden_link' href='#flat.multimap.cons-4.sentence-1'>.</a></div></div></div></div></div><div id='flat.multimap.cons.alloc' class='section'><h4 ><a class='secnum' href='#flat.multimap.cons.alloc' style='min-width:95pt'>24.6.10.4</a> Constructors with allocators <a class='abbr_ref' href='flat.multimap.cons.alloc'>[flat.multimap.cons.alloc]</a></h4><div class='para' id='flat.multimap.cons.alloc-1'><div class='marginalizedparent'><a class='marginalized' href='#flat.multimap.cons.alloc-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L17399'>#</a></div><div class='texpara'><div id='flat.multimap.cons.alloc-1.sentence-1' class='sentence'>The constructors in this subclause shall not participate in overload resolution
unless <span class='texttt'>uses_<span class='shy'></span>allocator_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>key_<span class='shy'></span>container_<span class='shy'></span>type, Alloc<span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>true</span></span>
and <span class='texttt'>uses_<span class='shy'></span>allocator_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>mapped_<span class='shy'></span>container_<span class='shy'></span>type, Alloc<span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#flat.multimap.cons.alloc-1.sentence-1'>.</a></div></div></div><div class='texpara'><div id='lib:flat_multimap,constructor__'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:flat_multimap,constructor__'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  flat_multimap<span class='parenthesis'>(</span><span class='keyword'>const</span> key_container_type<span class='operator'>&amp;</span> key_cont, <span class='keyword'>const</span> mapped_container_type<span class='operator'>&amp;</span> mapped_cont,
                <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span><span class='keyword'>const</span> key_container_type<span class='operator'>&amp;</span> key_cont, <span class='keyword'>const</span> mapped_container_type<span class='operator'>&amp;</span> mapped_cont,
                <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='flat.multimap.cons.alloc-2'><div class='marginalizedparent'><a class='marginalized' href='#flat.multimap.cons.alloc-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L17415'>#</a></div><div class='texpara'><div id='flat.multimap.cons.alloc-2.sentence-1' class='sentence'><i >Effects</i>: Equivalent to <span class='texttt'>flat_<span class='shy'></span>multimap<span class='parenthesis'>(</span>key_<span class='shy'></span>cont, mapped_<span class='shy'></span>cont<span class='parenthesis'>)</span></span> and
<span class='texttt'>flat_<span class='shy'></span>multimap<span class='parenthesis'>(</span>key_<span class='shy'></span>cont, mapped_<span class='shy'></span>cont, comp<span class='parenthesis'>)</span></span>, respectively,
except that <span class='texttt'>c<span class='operator'>.</span>keys</span> and <span class='texttt'>c<span class='operator'>.</span>values</span> are constructed
with uses-allocator construction (<a href='allocator.uses.construction' title='20.2.8.2&emsp;Uses-allocator construction'>[allocator.<span class='shy'></span>uses.<span class='shy'></span>construction]</a>)<a class='hidden_link' href='#flat.multimap.cons.alloc-2.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.multimap.cons.alloc-3'><div class='marginalizedparent'><a class='marginalized' href='#flat.multimap.cons.alloc-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L17422'>#</a></div><div class='texpara'><div id='flat.multimap.cons.alloc-3.sentence-1' class='sentence'><i >Complexity</i>: Same as <span class='texttt'>flat_<span class='shy'></span>multimap<span class='parenthesis'>(</span>key_<span class='shy'></span>cont, mapped_<span class='shy'></span>cont<span class='parenthesis'>)</span></span> and
<span class='texttt'>flat_<span class='shy'></span>multimap<span class='parenthesis'>(</span>key_<span class='shy'></span>cont, mapped_<span class='shy'></span>cont, comp<span class='parenthesis'>)</span></span>, respectively<a class='hidden_link' href='#flat.multimap.cons.alloc-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:flat_multimap,constructor___'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:flat_multimap,constructor___'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span>sorted_equivalent_t s, <span class='keyword'>const</span> key_container_type<span class='operator'>&amp;</span> key_cont,
                <span class='keyword'>const</span> mapped_container_type<span class='operator'>&amp;</span> mapped_cont, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span>sorted_equivalent_t s, <span class='keyword'>const</span> key_container_type<span class='operator'>&amp;</span> key_cont,
                <span class='keyword'>const</span> mapped_container_type<span class='operator'>&amp;</span> mapped_cont, <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp,
                <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='flat.multimap.cons.alloc-4'><div class='marginalizedparent'><a class='marginalized' href='#flat.multimap.cons.alloc-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L17440'>#</a></div><div class='texpara'><div id='flat.multimap.cons.alloc-4.sentence-1' class='sentence'><i >Effects</i>: Equivalent to <span class='texttt'>flat_<span class='shy'></span>multimap<span class='parenthesis'>(</span>s, key_<span class='shy'></span>cont, mapped_<span class='shy'></span>cont<span class='parenthesis'>)</span></span> and
<span class='texttt'>flat_<span class='shy'></span>multimap<span class='parenthesis'>(</span>s, key_<span class='shy'></span>cont, mapped_<span class='shy'></span>cont, comp<span class='parenthesis'>)</span></span>, respectively,
except that <span class='texttt'>c<span class='operator'>.</span>keys</span> and <span class='texttt'>c<span class='operator'>.</span>values</span> are constructed
with uses-allocator construction (<a href='allocator.uses.construction' title='20.2.8.2&emsp;Uses-allocator construction'>[allocator.<span class='shy'></span>uses.<span class='shy'></span>construction]</a>)<a class='hidden_link' href='#flat.multimap.cons.alloc-4.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.multimap.cons.alloc-5'><div class='marginalizedparent'><a class='marginalized' href='#flat.multimap.cons.alloc-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L17447'>#</a></div><div class='texpara'><div id='flat.multimap.cons.alloc-5.sentence-1' class='sentence'><i >Complexity</i>: Linear<a class='hidden_link' href='#flat.multimap.cons.alloc-5.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:flat_multimap,constructor____'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:flat_multimap,constructor____'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> flat_multimap<span class='parenthesis'>(</span><span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span><span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span><span class='keyword'>const</span> flat_multimap<span class='operator'>&amp;</span>, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span>flat_multimap<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span>InputIterator first, InputIterator last, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span>InputIterator first, InputIterator last, <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp,
                <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span>sorted_equivalent_t, InputIterator first, InputIterator last,
                <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span>sorted_equivalent_t, InputIterator first, InputIterator last,
                <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range_____________________________________________________________________________________________________________________'><span class='texttt'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range______________________________________________________________________________________________________________________'><span class='texttt'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il, <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span>sorted_equivalent_t, initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_multimap<span class='parenthesis'>(</span>sorted_equivalent_t, initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il,
                <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='flat.multimap.cons.alloc-6'><div class='marginalizedparent'><a class='marginalized' href='#flat.multimap.cons.alloc-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L17489'>#</a></div><div class='texpara'><div id='flat.multimap.cons.alloc-6.sentence-1' class='sentence'><i >Effects</i>: Equivalent to the corresponding non-allocator constructors
except that <span class='texttt'>c<span class='operator'>.</span>keys</span> and <span class='texttt'>c<span class='operator'>.</span>values</span> are constructed
with uses-allocator construction (<a href='allocator.uses.construction' title='20.2.8.2&emsp;Uses-allocator construction'>[allocator.<span class='shy'></span>uses.<span class='shy'></span>construction]</a>)<a class='hidden_link' href='#flat.multimap.cons.alloc-6.sentence-1'>.</a></div></div></div></div></div><div id='flat.multimap.erasure' class='section'><h4 ><a class='secnum' href='#flat.multimap.erasure' style='min-width:95pt'>24.6.10.5</a> Erasure <a class='abbr_ref' href='flat.multimap.erasure'>[flat.multimap.erasure]</a></h4><div class='texpara'><div id='lib:flat_multimap,erase_if'><div id='lib:erase_if,flat_multimap'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:erase_if,flat_multimap'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> T, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> KeyContainer, <span class='keyword'>class</span> MappedContainer,
         <span class='keyword'>class</span> Predicate<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>typename</span> flat_multimap<span class='anglebracket'>&lt;</span>Key, T, Compare, KeyContainer, MappedContainer<span class='anglebracket'>&gt;</span><span class='operator'>::</span>size_type
    erase_if<span class='parenthesis'>(</span>flat_multimap<span class='anglebracket'>&lt;</span>Key, T, Compare, KeyContainer, MappedContainer<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> c, Predicate pred<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='flat.multimap.erasure-1'><div class='marginalizedparent'><a class='marginalized' href='#flat.multimap.erasure-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L17507'>#</a></div><div class='texpara'><div id='flat.multimap.erasure-1.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>Key</span> and <span class='texttt'>T</span> meet the <i >Cpp17MoveAssignable</i> requirements<a class='hidden_link' href='#flat.multimap.erasure-1.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.multimap.erasure-2'><div class='marginalizedparent'><a class='marginalized' href='#flat.multimap.erasure-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L17511'>#</a></div><div class='texpara'><div id='flat.multimap.erasure-2.sentence-1' class='sentence'><i >Effects</i>: Let <span class='math'><span class='mathalpha'>E</span></span> be <span class='texttt'><span class='keyword'>bool</span><span class='parenthesis'>(</span>pred<span class='parenthesis'>(</span>pair<span class='anglebracket'>&lt;</span><span class='keyword'>const</span> Key<span class='operator'>&amp;</span>, <span class='keyword'>const</span> T<span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>e<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#flat.multimap.erasure-2.sentence-1'>.</a></div> <div id='flat.multimap.erasure-2.sentence-2' class='sentence'>Erases all elements <span class='texttt'>e</span> in <span class='texttt'>c</span> for which <span class='math'><span class='mathalpha'>E</span></span> holds<a class='hidden_link' href='#flat.multimap.erasure-2.sentence-2'>.</a></div></div></div></div><div class='para' id='flat.multimap.erasure-3'><div class='marginalizedparent'><a class='marginalized' href='#flat.multimap.erasure-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L17516'>#</a></div><div class='texpara'><div id='flat.multimap.erasure-3.sentence-1' class='sentence'><i >Returns</i>: The number of elements erased<a class='hidden_link' href='#flat.multimap.erasure-3.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.multimap.erasure-4'><div class='marginalizedparent'><a class='marginalized' href='#flat.multimap.erasure-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L17520'>#</a></div><div class='texpara'><div id='flat.multimap.erasure-4.sentence-1' class='sentence'><i >Complexity</i>: Exactly <span class='texttt'>c<span class='operator'>.</span>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> applications of the predicate<a class='hidden_link' href='#flat.multimap.erasure-4.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.multimap.erasure-5'><div class='marginalizedparent'><a class='marginalized' href='#flat.multimap.erasure-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L17524'>#</a></div><div class='texpara'><div id='flat.multimap.erasure-5.sentence-1' class='sentence'><i >Remarks</i>: Stable (<a href='algorithm.stable' title='16.4.6.8&emsp;Requirements for stable algorithms'>[algorithm.<span class='shy'></span>stable]</a>)<a class='hidden_link' href='#flat.multimap.erasure-5.sentence-1'>.</a></div> <div id='flat.multimap.erasure-5.sentence-2' class='sentence'>If an invocation of <span class='texttt'>erase_<span class='shy'></span>if</span> exits via an exception,
<span class='texttt'>c</span> is in a valid but unspecified state (<a href='defns.valid' title='3.65&emsp;valid but unspecified state'>[defns.<span class='shy'></span>valid]</a>)<a class='hidden_link' href='#flat.multimap.erasure-5.sentence-2'>.</a></div> <div id='flat.multimap.erasure-note-1' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#flat.multimap.erasure-note-1'>1</a></i>:&ensp;<div id='flat.multimap.erasure-5.sentence-3' class='sentence'><span class='texttt'>c</span> still meets its invariants,
but can be empty<a class='hidden_link' href='#flat.multimap.erasure-5.sentence-3'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div></div></div></div></div><div id='flat.set' class='section'><h3 ><a class='secnum' href='#flat.set' style='min-width:80pt'>24.6.11</a> Class template <span class='texttt'>flat_<span class='shy'></span>set</span> <a class='abbr_ref' href='flat.set'>[flat.set]</a></h3><div id='flat.set.overview' class='section'><h4 ><a class='secnum' href='#flat.set.overview' style='min-width:95pt'>24.6.11.1</a> Overview <a class='abbr_ref' href='flat.set.overview'>[flat.set.overview]</a></h4><div class='para' id='flat.set.overview-1'><div class='marginalizedparent'><a class='marginalized' href='#flat.set.overview-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L17539'>#</a></div><div class='texpara'><div id='flat.set.overview-1.sentence-1' class='sentence'><a class='index' id='lib:flat_set'></a>A <span class='texttt'>flat_<span class='shy'></span>set</span> is a container adaptor
that provides an associative container interface
that supports unique keys
(i.e., contains at most one of each key value) and
provides for fast retrieval of the keys themselves<a class='hidden_link' href='#flat.set.overview-1.sentence-1'>.</a></div> <div id='flat.set.overview-1.sentence-2' class='sentence'><span class='texttt'>flat_<span class='shy'></span>set</span> supports iterators that model
the <a href='iterator.concept.random.access#concept:random_access_iterator' title='25.3.4.13&emsp;Concept random_&shy;access_&shy;iterator&emsp;[iterator.concept.random.access]'><span id='conceptref:random_access_iterator__'><span class='texttt'>random_<span class='shy'></span>access_<span class='shy'></span>iterator</span></span></a> concept (<a href='iterator.concept.random.access' title='25.3.4.13&emsp;Concept random_&shy;access_&shy;iterator'>[iterator.<span class='shy'></span>concept.<span class='shy'></span>random.<span class='shy'></span>access]</a>)<a class='hidden_link' href='#flat.set.overview-1.sentence-2'>.</a></div></div></div><div class='para' id='flat.set.overview-2'><div class='marginalizedparent'><a class='marginalized' href='#flat.set.overview-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L17549'>#</a></div><div class='texpara'><div id='flat.set.overview-2.sentence-1' class='sentence'>A <span class='texttt'>flat_<span class='shy'></span>set</span> meets all of the requirements
for a container (<a href='#container.reqmts' title='24.2.2.2&emsp;Container requirements'>[container.<span class='shy'></span>reqmts]</a>) and
for a reversible container (<a href='#container.rev.reqmts' title='24.2.2.3&emsp;Reversible container requirements'>[container.<span class='shy'></span>rev.<span class='shy'></span>reqmts]</a>),
plus the optional container requirements (<a href='#container.opt.reqmts' title='24.2.2.4&emsp;Optional container requirements'>[container.<span class='shy'></span>opt.<span class='shy'></span>reqmts]</a>)<a class='hidden_link' href='#flat.set.overview-2.sentence-1'>.</a></div> <div id='flat.set.overview-2.sentence-2' class='sentence'><span class='texttt'>flat_<span class='shy'></span>set</span> meets the requirements of
an associative container (<a href='#associative.reqmts' title='24.2.7&emsp;Associative containers'>[associative.<span class='shy'></span>reqmts]</a>), except that:
<ul class='itemize'><li id='flat.set.overview-2.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#flat.set.overview-2.1'>(2.1)</a></div>it does not meet the requirements
related to node handles (<a href='#container.node.overview' title='24.2.5.1&emsp;Overview'>[container.<span class='shy'></span>node.<span class='shy'></span>overview]</a>),</li><li id='flat.set.overview-2.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#flat.set.overview-2.2'>(2.2)</a></div>it does not meet the requirements related to iterator invalidation, and</li><li id='flat.set.overview-2.3'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#flat.set.overview-2.3'>(2.3)</a></div>the time complexity of the operations
that insert or erase a single element from the set
is linear,
including the ones that take an insertion position iterator<a class='hidden_link' href='#flat.set.overview-2.sentence-2'>.</a></li></ul></div> <div id='flat.set.overview-note-1' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#flat.set.overview-note-1'>1</a></i>:&ensp;<div id='flat.set.overview-2.sentence-3' class='sentence'>A <span class='texttt'>flat_<span class='shy'></span>set</span> does not meet
the additional requirements of an allocator-aware container,
as described in <a href='#container.alloc.reqmts' title='24.2.2.5&emsp;Allocator-aware containers'>[container.<span class='shy'></span>alloc.<span class='shy'></span>reqmts]</a><a class='hidden_link' href='#flat.set.overview-2.sentence-3'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div></div><div class='para' id='flat.set.overview-3'><div class='marginalizedparent'><a class='marginalized' href='#flat.set.overview-3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L17574'>#</a></div><div class='texpara'><div id='flat.set.overview-3.sentence-1' class='sentence'>A <span class='texttt'>flat_<span class='shy'></span>set</span> also provides most operations
described in <a href='#associative.reqmts' title='24.2.7&emsp;Associative containers'>[associative.<span class='shy'></span>reqmts]</a> for unique keys<a class='hidden_link' href='#flat.set.overview-3.sentence-1'>.</a></div> <div id='flat.set.overview-3.sentence-2' class='sentence'>This means that a <span class='texttt'>flat_<span class='shy'></span>set</span> supports
the <span class='texttt'>a_<span class='shy'></span>uniq</span> operations in <a href='#associative.reqmts' title='24.2.7&emsp;Associative containers'>[associative.<span class='shy'></span>reqmts]</a>
but not the <span class='texttt'>a_<span class='shy'></span>eq</span> operations<a class='hidden_link' href='#flat.set.overview-3.sentence-2'>.</a></div> <div id='flat.set.overview-3.sentence-3' class='sentence'>For a <span class='texttt'>flat_<span class='shy'></span>set<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span></span>,
both the <span class='texttt'>key_<span class='shy'></span>type</span> and <span class='texttt'>value_<span class='shy'></span>type</span> are <span class='texttt'>Key</span><a class='hidden_link' href='#flat.set.overview-3.sentence-3'>.</a></div></div></div><div class='para' id='flat.set.overview-4'><div class='marginalizedparent'><a class='marginalized' href='#flat.set.overview-4'>4</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L17583'>#</a></div><div class='texpara'><div id='flat.set.overview-4.sentence-1' class='sentence'>Descriptions are provided here only for operations on <span class='texttt'>flat_<span class='shy'></span>set</span>
that are not described in one of those sets of requirements or
for operations where there is additional semantic information<a class='hidden_link' href='#flat.set.overview-4.sentence-1'>.</a></div></div></div><div class='para' id='flat.set.overview-5'><div class='marginalizedparent'><a class='marginalized' href='#flat.set.overview-5'>5</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L17588'>#</a></div><div class='texpara'><div id='flat.set.overview-5.sentence-1' class='sentence'>A <span class='texttt'>flat_<span class='shy'></span>set</span> maintains the invariant that the keys are sorted with
respect to the comparison object<a class='hidden_link' href='#flat.set.overview-5.sentence-1'>.</a></div></div></div><div class='para' id='flat.set.overview-6'><div class='marginalizedparent'><a class='marginalized' href='#flat.set.overview-6'>6</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L17592'>#</a></div><div class='texpara'><div id='flat.set.overview-6.sentence-1' class='sentence'>If any member function in <a href='#flat.set.defn' title='24.6.11.2&emsp;Definition'>[flat.<span class='shy'></span>set.<span class='shy'></span>defn]</a> exits via an exception,
the invariant is restored<a class='hidden_link' href='#flat.set.overview-6.sentence-1'>.</a></div> <div id='flat.set.overview-note-2' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#flat.set.overview-note-2'>2</a></i>:&ensp;<div id='flat.set.overview-6.sentence-2' class='sentence'>This can result in the <span class='texttt'>flat_<span class='shy'></span>set</span>'s being emptied<a class='hidden_link' href='#flat.set.overview-6.sentence-2'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div></div><div class='para' id='flat.set.overview-7'><div class='marginalizedparent'><a class='marginalized' href='#flat.set.overview-7'>7</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L17599'>#</a></div><div class='texpara'><div id='flat.set.overview-7.sentence-1' class='sentence'>Any sequence container (<a href='#sequence.reqmts' title='24.2.4&emsp;Sequence containers'>[sequence.<span class='shy'></span>reqmts]</a>)
supporting <i >Cpp17RandomAccessIterator</i>
can be used to instantiate <span class='texttt'>flat_<span class='shy'></span>set</span><a class='hidden_link' href='#flat.set.overview-7.sentence-1'>.</a></div> <div id='flat.set.overview-7.sentence-2' class='sentence'>In particular, <span class='texttt'>vector</span> (<a href='#vector' title='24.3.12&emsp;Class template vector'>[vector]</a>) and <span class='texttt'>deque</span> (<a href='#deque' title='24.3.9&emsp;Class template deque'>[deque]</a>)
can be used<a class='hidden_link' href='#flat.set.overview-7.sentence-2'>.</a></div> <div id='flat.set.overview-note-3' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#flat.set.overview-note-3'>3</a></i>:&ensp;<div id='flat.set.overview-7.sentence-3' class='sentence'><span class='texttt'>vector<span class='anglebracket'>&lt;</span><span class='keyword'>bool</span><span class='anglebracket'>&gt;</span></span> is not a sequence container<a class='hidden_link' href='#flat.set.overview-7.sentence-3'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div></div><div class='para' id='flat.set.overview-8'><div class='marginalizedparent'><a class='marginalized' href='#flat.set.overview-8'>8</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L17609'>#</a></div><div class='texpara'><div id='flat.set.overview-8.sentence-1' class='sentence'>The program is ill-formed if <span class='texttt'>Key</span> is not the same type
as <span class='texttt'>KeyContainer<span class='operator'>&#x200b;::&#x200b;</span>value_<span class='shy'></span>type</span><a class='hidden_link' href='#flat.set.overview-8.sentence-1'>.</a></div></div></div><div class='para' id='flat.set.overview-9'><div class='marginalizedparent'><a class='marginalized' href='#flat.set.overview-9'>9</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L17613'>#</a></div><div class='texpara'><div id='flat.set.overview-9.sentence-1' class='sentence'>The effect of calling a constructor or member function
that takes a <span class='texttt'>sorted_<span class='shy'></span>unique_<span class='shy'></span>t</span> argument
with a range that is not sorted with respect to <span class='texttt'>key_<span class='shy'></span>comp<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>, or
that contains equal elements, is undefined<a class='hidden_link' href='#flat.set.overview-9.sentence-1'>.</a></div></div></div>

<div class='para added' id=''><div class='marginalizedparent'><a class='marginalized' href='#flatset.overview-10'>10</a></div><div class='sourceLinkParent'><a class='sourceLink' href=''>#</a></div>
<div class='texpara'>The types <span class="texttt">iterator</span> and <span class="texttt">const_iterator</span> meet the constexpr iterator requirements (<a href="iterator.requirements.general" title="25.3.1 General">[iterator.<span class="shy"></span>requirements.<span class="shy"></span>general]</a>).</div></div>

</div>



<div id='flat.set.defn' class='section'><h4 ><a class='secnum' href='#flat.set.defn' style='min-width:95pt'>24.6.11.2</a> Definition <a class='abbr_ref' href='flat.set.defn'>[flat.set.defn]</a></h4><div class='texpara'><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>, <span class='keyword'>class</span> KeyContainer <span class='operator'>=</span> vector<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> <span id='lib:flat_set_'><a class='hidden_link' href='#lib:flat_set' title='24.6.11.2&emsp;Definition&emsp;[flat.set.defn]'>flat_set</a></span> <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> key_type                  <span class='operator'>=</span> Key;
    <span class='keyword'>using</span> value_type                <span class='operator'>=</span> Key;
    <span class='keyword'>using</span> key_compare               <span class='operator'>=</span> Compare;
    <span class='keyword'>using</span> value_compare             <span class='operator'>=</span> Compare;
    <span class='keyword'>using</span> reference                 <span class='operator'>=</span> value_type<span class='operator'>&amp;</span>;
    <span class='keyword'>using</span> const_reference           <span class='operator'>=</span> <span class='keyword'>const</span> value_type<span class='operator'>&amp;</span>;
    <span class='keyword'>using</span> size_type                 <span class='operator'>=</span> <span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>size_type;
    <span class='keyword'>using</span> difference_type           <span class='operator'>=</span> <span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>difference_type;
    <span class='keyword'>using</span> iterator                  <span class='operator'>=</span> <a class='index' id=':type_of_flat_set::iterator'></a><i >implementation-defined</i>;  <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> const_iterator            <span class='operator'>=</span> <a class='index' id=':type_of_flat_set::const_iterator'></a><i >implementation-defined</i>;  <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> reverse_iterator          <span class='operator'>=</span> std<span class='operator'>::</span>reverse_iterator<span class='anglebracket'>&lt;</span>iterator<span class='anglebracket'>&gt;</span>;
    <span class='keyword'>using</span> const_reverse_iterator    <span class='operator'>=</span> std<span class='operator'>::</span>reverse_iterator<span class='anglebracket'>&lt;</span>const_iterator<span class='anglebracket'>&gt;</span>;
    <span class='keyword'>using</span> container_type            <span class='operator'>=</span> KeyContainer;

    <span class='comment'>// <a href='#flat.set.cons' title='24.6.11.3&emsp;Constructors'>[flat.<span class='shy'></span>set.<span class='shy'></span>cons]</a>, constructors</span>
    <span class="keyword added">constexpr</span> flat_set<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>:</span> flat_set<span class='parenthesis'>(</span>key_compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>

    <span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> flat_set<span class='parenthesis'>(</span><span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp<span class='parenthesis'>)</span>
      <span class='operator'>:</span> <i >c</i><span class='parenthesis'>(</span><span class='parenthesis'>)</span>, <i >compare</i><span class='parenthesis'>(</span>comp<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>

    <span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> flat_set<span class='parenthesis'>(</span>container_type cont, <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> key_compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> flat_set<span class='parenthesis'>(</span>sorted_unique_t, container_type cont, <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> key_compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>:</span> <i >c</i><span class='parenthesis'>(</span>std<span class='operator'>::</span>move<span class='parenthesis'>(</span>cont<span class='parenthesis'>)</span><span class='parenthesis'>)</span>, <i >compare</i><span class='parenthesis'>(</span>comp<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>

    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_set<span class='parenthesis'>(</span>InputIterator first, InputIterator last, <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> key_compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
        <span class='operator'>:</span> <i >c</i><span class='parenthesis'>(</span><span class='parenthesis'>)</span>, <i >compare</i><span class='parenthesis'>(</span>comp<span class='parenthesis'>)</span>
        <span class='curlybracket'>{</span> insert<span class='parenthesis'>(</span>first, last<span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>

    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_set<span class='parenthesis'>(</span>sorted_unique_t, InputIterator first, InputIterator last,
               <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> key_compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
        <span class='operator'>:</span> <i >c</i><span class='parenthesis'>(</span>first, last<span class='parenthesis'>)</span>, <i >compare</i><span class='parenthesis'>(</span>comp<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>

    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range_______________________________________________________________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_set<span class='parenthesis'>(</span>from_range_t fr, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>
        <span class='operator'>:</span> flat_set<span class='parenthesis'>(</span>fr, std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>rg<span class='parenthesis'>)</span>, key_compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range________________________________________________________________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_set<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp<span class='parenthesis'>)</span>
        <span class='operator'>:</span> flat_set<span class='parenthesis'>(</span>comp<span class='parenthesis'>)</span>
        <span class='curlybracket'>{</span> insert_range<span class='parenthesis'>(</span>std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>rg<span class='parenthesis'>)</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>

    <span class="keyword added">constexpr</span> flat_set<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il, <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> key_compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
        <span class='operator'>:</span> flat_set<span class='parenthesis'>(</span>il<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, il<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, comp<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>

    <span class="keyword added">constexpr</span> flat_set<span class='parenthesis'>(</span>sorted_unique_t s, initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il,
             <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> key_compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
        <span class='operator'>:</span> flat_set<span class='parenthesis'>(</span>s, il<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, il<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, comp<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>

    <span class='comment'>// <a href='#flat.set.cons.alloc' title='24.6.11.4&emsp;Constructors with allocators'>[flat.<span class='shy'></span>set.<span class='shy'></span>cons.<span class='shy'></span>alloc]</a>, constructors with allocators</span>

    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> flat_set<span class='parenthesis'>(</span><span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_set<span class='parenthesis'>(</span><span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_set<span class='parenthesis'>(</span><span class='keyword'>const</span> container_type<span class='operator'>&amp;</span> cont, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_set<span class='parenthesis'>(</span><span class='keyword'>const</span> container_type<span class='operator'>&amp;</span> cont, <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_set<span class='parenthesis'>(</span>sorted_unique_t, <span class='keyword'>const</span> container_type<span class='operator'>&amp;</span> cont, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_set<span class='parenthesis'>(</span>sorted_unique_t, <span class='keyword'>const</span> container_type<span class='operator'>&amp;</span> cont,
               <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_set<span class='parenthesis'>(</span><span class='keyword'>const</span> flat_set<span class='operator'>&amp;</span>, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_set<span class='parenthesis'>(</span>flat_set<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_set<span class='parenthesis'>(</span>InputIterator first, InputIterator last, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_set<span class='parenthesis'>(</span>InputIterator first, InputIterator last,
               <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_set<span class='parenthesis'>(</span>sorted_unique_t, InputIterator first, InputIterator last, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_set<span class='parenthesis'>(</span>sorted_unique_t, InputIterator first, InputIterator last,
               <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range_________________________________________________________________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_set<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range__________________________________________________________________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_set<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_set<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_set<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il, <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_set<span class='parenthesis'>(</span>sorted_unique_t, initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_set<span class='parenthesis'>(</span>sorted_unique_t, initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il,
               <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> flat_set<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;

    <span class='comment'>// iterators</span>
    <span class="keyword added">constexpr</span> iterator               begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator         begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> iterator               end<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator         end<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class="keyword added">constexpr</span> reverse_iterator       rbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_reverse_iterator rbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> reverse_iterator       rend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_reverse_iterator rend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class="keyword added">constexpr</span> const_iterator         cbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator         cend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_reverse_iterator crbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_reverse_iterator crend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// capacity</span>
    <span class='squarebracket'>[</span><span class='squarebracket'>[</span>nodiscard<span class='squarebracket'>]</span><span class='squarebracket'>]</span>  <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> size_type size<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> size_type max_size<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// <a href='#flat.set.modifiers' title='24.6.11.5&emsp;Modifiers'>[flat.<span class='shy'></span>set.<span class='shy'></span>modifiers]</a>, modifiers</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> emplace<span class='parenthesis'>(</span>Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> iterator emplace_hint<span class='parenthesis'>(</span>const_iterator position, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> insert<span class='parenthesis'>(</span><span class='keyword'>const</span> value_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>
      <span class='curlybracket'>{</span> <span class='keyword'>return</span> emplace<span class='parenthesis'>(</span>x<span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> insert<span class='parenthesis'>(</span>value_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>
      <span class='curlybracket'>{</span> <span class='keyword'>return</span> emplace<span class='parenthesis'>(</span>std<span class='operator'>::</span>move<span class='parenthesis'>(</span>x<span class='parenthesis'>)</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> insert<span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, <span class='keyword'>const</span> value_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>
      <span class='curlybracket'>{</span> <span class='keyword'>return</span> emplace_hint<span class='parenthesis'>(</span>position, x<span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, value_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>
      <span class='curlybracket'>{</span> <span class='keyword'>return</span> emplace_hint<span class='parenthesis'>(</span>position, std<span class='operator'>::</span>move<span class='parenthesis'>(</span>x<span class='parenthesis'>)</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator hint, K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;

    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert<span class='parenthesis'>(</span>InputIterator first, InputIterator last<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert<span class='parenthesis'>(</span>sorted_unique_t, InputIterator first, InputIterator last<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range___________________________________________________________________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert_range<span class='parenthesis'>(</span>R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il<span class='parenthesis'>)</span>
      <span class='curlybracket'>{</span> insert<span class='parenthesis'>(</span>il<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, il<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert<span class='parenthesis'>(</span>sorted_unique_t s, initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il<span class='parenthesis'>)</span>
      <span class='curlybracket'>{</span> insert<span class='parenthesis'>(</span>s, il<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, il<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>

    <span class="keyword added">constexpr</span> container_type extract<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> replace<span class='parenthesis'>(</span>container_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> iterator erase<span class='parenthesis'>(</span>iterator position<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator erase<span class='parenthesis'>(</span>const_iterator position<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> size_type erase<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> size_type erase<span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator erase<span class='parenthesis'>(</span>const_iterator first, const_iterator last<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> swap<span class='parenthesis'>(</span>flat_set<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> clear<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// observers</span>
    <span class="keyword added">constexpr</span> key_compare key_comp<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> value_compare value_comp<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// set operations</span>
    <span class="keyword added">constexpr</span> iterator find<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> const_iterator find<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator find<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> const_iterator find<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="keyword added">constexpr</span> size_type count<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> size_type count<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> contains<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> contains<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="keyword added">constexpr</span> iterator lower_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> const_iterator lower_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator lower_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> const_iterator lower_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="keyword added">constexpr</span> iterator upper_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> const_iterator upper_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator upper_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> const_iterator upper_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, iterator<span class='anglebracket'>&gt;</span> equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>const_iterator, const_iterator<span class='anglebracket'>&gt;</span> equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, iterator<span class='anglebracket'>&gt;</span> equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>const_iterator, const_iterator<span class='anglebracket'>&gt;</span> equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="keyword added">constexpr</span> <span class='keyword'>friend</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> flat_set<span class='operator'>&amp;</span> x, <span class='keyword'>const</span> flat_set<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> <span class='keyword'>friend</span> <i >synth-three-way-result</i><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span>
      <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='operator'>=</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='keyword'>const</span> flat_set<span class='operator'>&amp;</span> x, <span class='keyword'>const</span> flat_set<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> <span class='keyword'>friend</span> <span class='keyword'>void</span> swap<span class='parenthesis'>(</span>flat_set<span class='operator'>&amp;</span> x, flat_set<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span> <span class='keyword'>noexcept</span> <span class='curlybracket'>{</span> x<span class='operator'>.</span>swap<span class='parenthesis'>(</span>y<span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>

  <span class='keyword'>private</span><span class='operator'>:</span>
    container_type <i >c</i>;           <span class='comment'>// <i >exposition only</i></span>
    key_compare <i >compare</i>;        <span class='comment'>// <i >exposition only</i></span>
  <span class='curlybracket'>}</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> KeyContainer, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>value_type<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    flat_set<span class='parenthesis'>(</span>KeyContainer, Compare <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_set<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>value_type, Compare, KeyContainer<span class='anglebracket'>&gt;</span>;
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> KeyContainer, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    flat_set<span class='parenthesis'>(</span>KeyContainer, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_set<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>value_type,
                  less<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>value_type<span class='anglebracket'>&gt;</span>, KeyContainer<span class='anglebracket'>&gt;</span>;
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> KeyContainer, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    flat_set<span class='parenthesis'>(</span>KeyContainer, Compare, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_set<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>value_type, Compare, KeyContainer<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> KeyContainer, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>value_type<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    flat_set<span class='parenthesis'>(</span>sorted_unique_t, KeyContainer, Compare <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_set<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>value_type, Compare, KeyContainer<span class='anglebracket'>&gt;</span>;
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> KeyContainer, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    flat_set<span class='parenthesis'>(</span>sorted_unique_t, KeyContainer, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_set<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>value_type,
                  less<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>value_type<span class='anglebracket'>&gt;</span>, KeyContainer<span class='anglebracket'>&gt;</span>;
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> KeyContainer, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    flat_set<span class='parenthesis'>(</span>sorted_unique_t, KeyContainer, Compare, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_set<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>value_type, Compare, KeyContainer<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    flat_set<span class='parenthesis'>(</span>InputIterator, InputIterator, Compare <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_set<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>, Compare<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    flat_set<span class='parenthesis'>(</span>sorted_unique_t, InputIterator, InputIterator, Compare <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_set<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>, Compare<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range___________________________________________'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    flat_set<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, Compare <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, Allocator <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_set<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, Compare,
                  vector<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>,
                         <i >alloc-rebind</i><span class='anglebracket'>&lt;</span>Allocator, ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range____________________________________________'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    flat_set<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_set<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, less<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
                  vector<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>,
                         <i >alloc-rebind</i><span class='anglebracket'>&lt;</span>Allocator, ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    flat_set<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>, Compare <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_set<span class='anglebracket'>&lt;</span>Key, Compare<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    flat_set<span class='parenthesis'>(</span>sorted_unique_t, initializer_list<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>, Compare <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_set<span class='anglebracket'>&lt;</span>Key, Compare<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> KeyContainer, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    <span class='keyword'>struct</span> uses_allocator<span class='anglebracket'>&lt;</span>flat_set<span class='anglebracket'>&lt;</span>Key, Compare, KeyContainer<span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>
      <span class='operator'>:</span> bool_constant<span class='anglebracket'>&lt;</span>uses_allocator_v<span class='anglebracket'>&lt;</span>KeyContainer, Allocator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></div></div><div id='flat.set.cons' class='section'><h4 ><a class='secnum' href='#flat.set.cons' style='min-width:95pt'>24.6.11.3</a> Constructors <a class='abbr_ref' href='flat.set.cons'>[flat.set.cons]</a></h4><div class='texpara'><div id='lib:flat_set,constructor'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:flat_set,constructor'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> flat_set<span class='parenthesis'>(</span>container_type cont, <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> key_compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='flat.set.cons-1'><div class='marginalizedparent'><a class='marginalized' href='#flat.set.cons-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L17893'>#</a></div><div class='texpara'><div id='flat.set.cons-1.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'><i >c</i></span> with <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>move<span class='parenthesis'>(</span>cont<span class='parenthesis'>)</span></span> and
<span class='texttt'><i >compare</i></span> with <span class='texttt'>comp</span>,
sorts the range [<span class='texttt'>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, end<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>) with respect to <span class='texttt'><i >compare</i></span>, and
finally erases all but the first element
from each group of consecutive equivalent elements<a class='hidden_link' href='#flat.set.cons-1.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.set.cons-2'><div class='marginalizedparent'><a class='marginalized' href='#flat.set.cons-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L17901'>#</a></div><div class='texpara'><div id='flat.set.cons-2.sentence-1' class='sentence'><i >Complexity</i>: Linear in <span class='math'><span class='mathalpha'>N</span></span> if <span class='texttt'>cont</span> is already sorted with respect to <span class='texttt'><i >compare</i></span> and
otherwise <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.085em;">N</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">log</span></span><span class="mjx-mo"><span class="mjx-char"></span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.085em;">N</span></span></span></span></span></span>, where <span class='math'><span class='mathalpha'>N</span></span> is the value of <span class='texttt'>cont<span class='operator'>.</span>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> before this call<a class='hidden_link' href='#flat.set.cons-2.sentence-1'>.</a></div></div></div></div></div><div id='flat.set.cons.alloc' class='section'><h4 ><a class='secnum' href='#flat.set.cons.alloc' style='min-width:95pt'>24.6.11.4</a> Constructors with allocators <a class='abbr_ref' href='flat.set.cons.alloc'>[flat.set.cons.alloc]</a></h4><div class='para' id='flat.set.cons.alloc-1'><div class='marginalizedparent'><a class='marginalized' href='#flat.set.cons.alloc-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L17909'>#</a></div><div class='texpara'><div id='flat.set.cons.alloc-1.sentence-1' class='sentence'>The constructors in this subclause shall not participate in overload resolution
unless <span class='texttt'>uses_<span class='shy'></span>allocator_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>container_<span class='shy'></span>type, Alloc<span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#flat.set.cons.alloc-1.sentence-1'>.</a></div></div></div><div class='texpara'><div id='lib:flat_set,constructor_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:flat_set,constructor_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_set<span class='parenthesis'>(</span><span class='keyword'>const</span> container_type<span class='operator'>&amp;</span> cont, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_set<span class='parenthesis'>(</span><span class='keyword'>const</span> container_type<span class='operator'>&amp;</span> cont, <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='flat.set.cons.alloc-2'><div class='marginalizedparent'><a class='marginalized' href='#flat.set.cons.alloc-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L17922'>#</a></div><div class='texpara'><div id='flat.set.cons.alloc-2.sentence-1' class='sentence'><i >Effects</i>: Equivalent to
<span class='texttt'>flat_<span class='shy'></span>set<span class='parenthesis'>(</span>cont<span class='parenthesis'>)</span></span> and <span class='texttt'>flat_<span class='shy'></span>set<span class='parenthesis'>(</span>cont, comp<span class='parenthesis'>)</span></span>, respectively,
except that <span class='texttt'><i >c</i></span> is constructed with
uses-allocator construction (<a href='allocator.uses.construction' title='20.2.8.2&emsp;Uses-allocator construction'>[allocator.<span class='shy'></span>uses.<span class='shy'></span>construction]</a>)<a class='hidden_link' href='#flat.set.cons.alloc-2.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.set.cons.alloc-3'><div class='marginalizedparent'><a class='marginalized' href='#flat.set.cons.alloc-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L17929'>#</a></div><div class='texpara'><div id='flat.set.cons.alloc-3.sentence-1' class='sentence'><i >Complexity</i>: Same as <span class='texttt'>flat_<span class='shy'></span>set<span class='parenthesis'>(</span>cont<span class='parenthesis'>)</span></span> and <span class='texttt'>flat_<span class='shy'></span>set<span class='parenthesis'>(</span>cont, comp<span class='parenthesis'>)</span></span>, respectively<a class='hidden_link' href='#flat.set.cons.alloc-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:flat_set,constructor__'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:flat_set,constructor__'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_set<span class='parenthesis'>(</span>sorted_unique_t s, <span class='keyword'>const</span> container_type<span class='operator'>&amp;</span> cont, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_set<span class='parenthesis'>(</span>sorted_unique_t s, <span class='keyword'>const</span> container_type<span class='operator'>&amp;</span> cont,
           <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='flat.set.cons.alloc-4'><div class='marginalizedparent'><a class='marginalized' href='#flat.set.cons.alloc-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L17944'>#</a></div><div class='texpara'><div id='flat.set.cons.alloc-4.sentence-1' class='sentence'><i >Effects</i>: Equivalent to
<span class='texttt'>flat_<span class='shy'></span>set<span class='parenthesis'>(</span>s, cont<span class='parenthesis'>)</span></span> and <span class='texttt'>flat_<span class='shy'></span>set<span class='parenthesis'>(</span>s, cont, comp<span class='parenthesis'>)</span></span>, respectively,
except that <span class='texttt'><i >c</i></span> is constructed with
uses-allocator construction (<a href='allocator.uses.construction' title='20.2.8.2&emsp;Uses-allocator construction'>[allocator.<span class='shy'></span>uses.<span class='shy'></span>construction]</a>)<a class='hidden_link' href='#flat.set.cons.alloc-4.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.set.cons.alloc-5'><div class='marginalizedparent'><a class='marginalized' href='#flat.set.cons.alloc-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L17951'>#</a></div><div class='texpara'><div id='flat.set.cons.alloc-5.sentence-1' class='sentence'><i >Complexity</i>: Linear<a class='hidden_link' href='#flat.set.cons.alloc-5.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:flat_set,constructor___'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:flat_set,constructor___'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> flat_set<span class='parenthesis'>(</span><span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_set<span class='parenthesis'>(</span><span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_set<span class='parenthesis'>(</span><span class='keyword'>const</span> flat_set<span class='operator'>&amp;</span>, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_set<span class='parenthesis'>(</span>flat_set<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_set<span class='parenthesis'>(</span>InputIterator first, InputIterator last, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_set<span class='parenthesis'>(</span>InputIterator first, InputIterator last, <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_set<span class='parenthesis'>(</span>sorted_unique_t, InputIterator first, InputIterator last, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_set<span class='parenthesis'>(</span>sorted_unique_t, InputIterator first, InputIterator last,
           <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range____________________________________________________________________________________________________________________________'><span class='texttt'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_set<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range_____________________________________________________________________________________________________________________________'><span class='texttt'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_set<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_set<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_set<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il, <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_set<span class='parenthesis'>(</span>sorted_unique_t, initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_set<span class='parenthesis'>(</span>sorted_unique_t, initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il,
           <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='flat.set.cons.alloc-6'><div class='marginalizedparent'><a class='marginalized' href='#flat.set.cons.alloc-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L17991'>#</a></div><div class='texpara'><div id='flat.set.cons.alloc-6.sentence-1' class='sentence'><i >Effects</i>: Equivalent to the corresponding non-allocator constructors
except that <span class='texttt'><i >c</i></span> is constructed with
uses-allocator construction (<a href='allocator.uses.construction' title='20.2.8.2&emsp;Uses-allocator construction'>[allocator.<span class='shy'></span>uses.<span class='shy'></span>construction]</a>)<a class='hidden_link' href='#flat.set.cons.alloc-6.sentence-1'>.</a></div></div></div></div></div><div id='flat.set.modifiers' class='section'><h4 ><a class='secnum' href='#flat.set.modifiers' style='min-width:95pt'>24.6.11.5</a> Modifiers <a class='abbr_ref' href='flat.set.modifiers'>[flat.set.modifiers]</a></h4><div class='texpara'><div id='lib:flat_set,insert'><div id='lib:insert,flat_set'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:insert,flat_set'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> insert<span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator hint, K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='flat.set.modifiers-1'><div class='marginalizedparent'><a class='marginalized' href='#flat.set.modifiers-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18007'>#</a></div><div class='texpara'><div id='flat.set.modifiers-1.sentence-1' class='sentence'><i >Constraints</i>: The <a href='expr.prim.id.qual#nt:qualified-id' title='7.5.5.3&emsp;Qualified names&emsp;[expr.prim.id.qual]'><span id='ntref:qualified-id____________________'><span class='textsf'><i >qualified-id</i></span></span></a> <span class='texttt'>Compare<span class='operator'>&#x200b;::&#x200b;</span>is_<span class='shy'></span>transparent</span>
is valid and denotes a type<a class='hidden_link' href='#flat.set.modifiers-1.sentence-1'>.</a></div> <div id='flat.set.modifiers-1.sentence-2' class='sentence'><span class='texttt'>is_<span class='shy'></span>constructible_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>value_<span class='shy'></span>type, K<span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#flat.set.modifiers-1.sentence-2'>.</a></div></div></div></div><div class='para' id='flat.set.modifiers-2'><div class='marginalizedparent'><a class='marginalized' href='#flat.set.modifiers-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18013'>#</a></div><div class='texpara'><div id='flat.set.modifiers-2.sentence-1' class='sentence'><i >Preconditions</i>: The conversion from <span class='texttt'>x</span> into <span class='texttt'>value_<span class='shy'></span>type</span> constructs
an object <span class='texttt'>u</span>, for which <span class='texttt'>find<span class='parenthesis'>(</span>x<span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> find<span class='parenthesis'>(</span>u<span class='parenthesis'>)</span></span> is true<a class='hidden_link' href='#flat.set.modifiers-2.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.set.modifiers-3'><div class='marginalizedparent'><a class='marginalized' href='#flat.set.modifiers-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18018'>#</a></div><div class='texpara'><div id='flat.set.modifiers-3.sentence-1' class='sentence'><i >Effects</i>: If the set already contains an element equivalent to <span class='texttt'>x</span>,
<span class='texttt'><span class='operator'>*</span><span class='keyword'>this</span></span> and <span class='texttt'>x</span> are unchanged<a class='hidden_link' href='#flat.set.modifiers-3.sentence-1'>.</a></div> <div id='flat.set.modifiers-3.sentence-2' class='sentence'>Otherwise,
inserts a new element as if by <span class='texttt'>emplace<span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>K<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>x<span class='parenthesis'>)</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#flat.set.modifiers-3.sentence-2'>.</a></div></div></div></div><div class='para' id='flat.set.modifiers-4'><div class='marginalizedparent'><a class='marginalized' href='#flat.set.modifiers-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18025'>#</a></div><div class='texpara'><div id='flat.set.modifiers-4.sentence-1' class='sentence'><i >Returns</i>: In the first overload,
the <span class='texttt'><span class='keyword'>bool</span></span> component of the returned pair is <span class='texttt'><span class='literal'>true</span></span>
if and only if the insertion took place<a class='hidden_link' href='#flat.set.modifiers-4.sentence-1'>.</a></div> <div id='flat.set.modifiers-4.sentence-2' class='sentence'>The returned iterator points to the element
whose key is equivalent to <span class='texttt'>x</span><a class='hidden_link' href='#flat.set.modifiers-4.sentence-2'>.</a></div></div></div></div><div class='texpara'><div id='lib:flatset,insert'><div id='lib:insert,flatset'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:insert,flatset'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert<span class='parenthesis'>(</span>InputIterator first, InputIterator last<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='flat.set.modifiers-5'><div class='marginalizedparent'><a class='marginalized' href='#flat.set.modifiers-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18041'>#</a></div><div class='texpara'><div id='flat.set.modifiers-5.sentence-1' class='sentence'><i >Effects</i>: Adds elements to <span class='texttt'><i >c</i></span> as if by:
<span class='codeblock'><i >c</i><span class='operator'>.</span>insert<span class='parenthesis'>(</span><i >c</i><span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, first, last<span class='parenthesis'>)</span>;
</span></div> <div id='flat.set.modifiers-5.sentence-2' class='sentence'>
Then,
sorts the range of newly inserted elements with respect to <span class='texttt'><i >compare</i></span>;
merges the resulting sorted range and
the sorted range of pre-existing elements into a single sorted range; and
finally erases all but the first element
from each group of consecutive equivalent elements<a class='hidden_link' href='#flat.set.modifiers-5.sentence-2'>.</a></div></div></div></div><div class='para' id='flat.set.modifiers-6'><div class='marginalizedparent'><a class='marginalized' href='#flat.set.modifiers-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18054'>#</a></div><div class='texpara'><div id='flat.set.modifiers-6.sentence-1' class='sentence'><i >Complexity</i>: <span class='math'><span class='mathalpha'>N</span></span> + <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.081em;">M</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">log</span></span><span class="mjx-mo"><span class="mjx-char"></span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.081em;">M</span></span></span></span></span></span>, where <span class='math'><span class='mathalpha'>N</span></span> is <span class='texttt'>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> before the operation and
<span class='math'><span class='mathalpha'>M</span></span> is <span class='texttt'>distance<span class='parenthesis'>(</span>first, last<span class='parenthesis'>)</span></span><a class='hidden_link' href='#flat.set.modifiers-6.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.set.modifiers-7'><div class='marginalizedparent'><a class='marginalized' href='#flat.set.modifiers-7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18059'>#</a></div><div class='texpara'><div id='flat.set.modifiers-7.sentence-1' class='sentence'><i >Remarks</i>: Since this operation performs an in-place merge, it may allocate memory<a class='hidden_link' href='#flat.set.modifiers-7.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:flat_set,insert_'><div id='lib:insert,flat_set_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:insert,flat_set_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert<span class='parenthesis'>(</span>sorted_unique_t, InputIterator first, InputIterator last<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='flat.set.modifiers-8'><div class='marginalizedparent'><a class='marginalized' href='#flat.set.modifiers-8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18071'>#</a></div><div class='texpara'><div id='flat.set.modifiers-8.sentence-1' class='sentence'><i >Effects</i>: Equivalent to <span class='texttt'>insert<span class='parenthesis'>(</span>first, last<span class='parenthesis'>)</span></span><a class='hidden_link' href='#flat.set.modifiers-8.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.set.modifiers-9'><div class='marginalizedparent'><a class='marginalized' href='#flat.set.modifiers-9'>9</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18075'>#</a></div><div class='texpara'><div id='flat.set.modifiers-9.sentence-1' class='sentence'><i >Complexity</i>: Linear<a class='hidden_link' href='#flat.set.modifiers-9.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:flat_set,insert_range'><div id='lib:insert_range,flat_set'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:insert_range,flat_set'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range______________________________________________________________________________________________________________________________'><span class='texttt'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert_range<span class='parenthesis'>(</span>R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='flat.set.modifiers-10'><div class='marginalizedparent'><a class='marginalized' href='#flat.set.modifiers-10'>10</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18087'>#</a></div><div class='texpara'><div id='flat.set.modifiers-10.sentence-1' class='sentence'><i >Effects</i>: Adds elements to <span class='texttt'><i >c</i></span> as if by:
<span class='codeblock'><span class='keyword'>for</span> <span class='parenthesis'>(</span><span class='keyword'>const</span> <span class='keyword'>auto</span><span class='operator'>&amp;</span> e <span class='operator'>:</span> rg<span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
  <i >c</i><span class='operator'>.</span>insert<span class='parenthesis'>(</span><i >c</i><span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, e<span class='parenthesis'>)</span>;
<span class='curlybracket'>}</span>
</span></div> <div id='flat.set.modifiers-10.sentence-2' class='sentence'>
Then,
sorts the range of newly inserted elements with respect to <span class='texttt'><i >compare</i></span>;
merges the resulting sorted range and
the sorted range of pre-existing elements into a single sorted range; and
finally erases all but the first element
from each group of consecutive equivalent elements<a class='hidden_link' href='#flat.set.modifiers-10.sentence-2'>.</a></div></div></div></div><div class='para' id='flat.set.modifiers-11'><div class='marginalizedparent'><a class='marginalized' href='#flat.set.modifiers-11'>11</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18102'>#</a></div><div class='texpara'><div id='flat.set.modifiers-11.sentence-1' class='sentence'><i >Complexity</i>: <span class='math'><span class='mathalpha'>N</span></span> + <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.081em;">M</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">log</span></span><span class="mjx-mo"><span class="mjx-char"></span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.081em;">M</span></span></span></span></span></span>, where <span class='math'><span class='mathalpha'>N</span></span> is <span class='texttt'>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> before the operation and <span class='math'><span class='mathalpha'>M</span></span>
is <span class='texttt'>ranges<span class='operator'>&#x200b;::&#x200b;</span>distance<span class='parenthesis'>(</span>rg<span class='parenthesis'>)</span></span><a class='hidden_link' href='#flat.set.modifiers-11.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.set.modifiers-12'><div class='marginalizedparent'><a class='marginalized' href='#flat.set.modifiers-12'>12</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18107'>#</a></div><div class='texpara'><div id='flat.set.modifiers-12.sentence-1' class='sentence'><i >Remarks</i>: Since this operation performs an in-place merge, it may allocate memory<a class='hidden_link' href='#flat.set.modifiers-12.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:flat_set,swap'><div id='lib:swap,flat_set'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:swap,flat_set'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>void</span> swap<span class='parenthesis'>(</span>flat_set<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
</code></div></div></div></div><div class='para' id='flat.set.modifiers-13'><div class='marginalizedparent'><a class='marginalized' href='#flat.set.modifiers-13'>13</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18118'>#</a></div><div class='texpara'><div id='flat.set.modifiers-13.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'>ranges<span class='operator'>::</span>swap<span class='parenthesis'>(</span><i >compare</i>, y<span class='operator'>.</span><i >compare</i><span class='parenthesis'>)</span>;
ranges<span class='operator'>::</span>swap<span class='parenthesis'>(</span><i >c</i>, y<span class='operator'>.</span><i >c</i><span class='parenthesis'>)</span>;
</span></div></div></div></div><div class='texpara'><div id='lib:flatset,extract'><div id='lib:extract,flatset'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:extract,flatset'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> container_type extract<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>;
</code></div></div></div></div><div class='para' id='flat.set.modifiers-14'><div class='marginalizedparent'><a class='marginalized' href='#flat.set.modifiers-14'>14</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18133'>#</a></div><div class='texpara'><div id='flat.set.modifiers-14.sentence-1' class='sentence'><i >Postconditions</i>: <span class='texttt'><span class='operator'>*</span><span class='keyword'>this</span></span> is emptied, even if the function exits via an exception<a class='hidden_link' href='#flat.set.modifiers-14.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.set.modifiers-15'><div class='marginalizedparent'><a class='marginalized' href='#flat.set.modifiers-15'>15</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18137'>#</a></div><div class='texpara'><div id='flat.set.modifiers-15.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>move<span class='parenthesis'>(</span><span class='texttt'><i >c</i></span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#flat.set.modifiers-15.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:flat_set,replace'><div id='lib:replace,flat_set'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:replace,flat_set'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>void</span> replace<span class='parenthesis'>(</span>container_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> cont<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='flat.set.modifiers-16'><div class='marginalizedparent'><a class='marginalized' href='#flat.set.modifiers-16'>16</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18148'>#</a></div><div class='texpara'><div id='flat.set.modifiers-16.sentence-1' class='sentence'><i >Preconditions</i>: The elements of <span class='texttt'>cont</span> are sorted with respect to <span class='texttt'><i >compare</i></span>, and
<span class='texttt'>cont</span> contains no equal elements<a class='hidden_link' href='#flat.set.modifiers-16.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.set.modifiers-17'><div class='marginalizedparent'><a class='marginalized' href='#flat.set.modifiers-17'>17</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18153'>#</a></div><div class='texpara'><div id='flat.set.modifiers-17.sentence-1' class='sentence'><i >Effects</i>: Equivalent to: <span class='texttt'><span class='texttt'><i >c</i></span> <span class='operator'>=</span> std<span class='operator'>&#x200b;::&#x200b;</span>move<span class='parenthesis'>(</span>cont<span class='parenthesis'>)</span>;</span></div></div></div></div></div><div id='flat.set.erasure' class='section'><h4 ><a class='secnum' href='#flat.set.erasure' style='min-width:95pt'>24.6.11.6</a> Erasure <a class='abbr_ref' href='flat.set.erasure'>[flat.set.erasure]</a></h4><div class='texpara'><div id='lib:flat_set,erase_if'><div id='lib:erase_if,flat_set'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:erase_if,flat_set'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> KeyContainer, <span class='keyword'>class</span> Predicate<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>typename</span> flat_set<span class='anglebracket'>&lt;</span>Key, Compare, KeyContainer<span class='anglebracket'>&gt;</span><span class='operator'>::</span>size_type
    erase_if<span class='parenthesis'>(</span>flat_set<span class='anglebracket'>&lt;</span>Key, Compare, KeyContainer<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> c, Predicate pred<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='flat.set.erasure-1'><div class='marginalizedparent'><a class='marginalized' href='#flat.set.erasure-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18168'>#</a></div><div class='texpara'><div id='flat.set.erasure-1.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>Key</span> meets the <i >Cpp17MoveAssignable</i> requirements<a class='hidden_link' href='#flat.set.erasure-1.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.set.erasure-2'><div class='marginalizedparent'><a class='marginalized' href='#flat.set.erasure-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18172'>#</a></div><div class='texpara'><div id='flat.set.erasure-2.sentence-1' class='sentence'><i >Effects</i>: Let <span class='math'><span class='mathalpha'>E</span></span> be <span class='texttt'><span class='keyword'>bool</span><span class='parenthesis'>(</span>pred<span class='parenthesis'>(</span>as_<span class='shy'></span>const<span class='parenthesis'>(</span>e<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#flat.set.erasure-2.sentence-1'>.</a></div> <div id='flat.set.erasure-2.sentence-2' class='sentence'>Erases all elements <span class='texttt'>e</span> in <span class='texttt'>c</span> for which <span class='math'><span class='mathalpha'>E</span></span> holds<a class='hidden_link' href='#flat.set.erasure-2.sentence-2'>.</a></div></div></div></div><div class='para' id='flat.set.erasure-3'><div class='marginalizedparent'><a class='marginalized' href='#flat.set.erasure-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18177'>#</a></div><div class='texpara'><div id='flat.set.erasure-3.sentence-1' class='sentence'><i >Returns</i>: The number of elements erased<a class='hidden_link' href='#flat.set.erasure-3.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.set.erasure-4'><div class='marginalizedparent'><a class='marginalized' href='#flat.set.erasure-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18181'>#</a></div><div class='texpara'><div id='flat.set.erasure-4.sentence-1' class='sentence'><i >Complexity</i>: Exactly <span class='texttt'>c<span class='operator'>.</span>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> applications of the predicate<a class='hidden_link' href='#flat.set.erasure-4.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.set.erasure-5'><div class='marginalizedparent'><a class='marginalized' href='#flat.set.erasure-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18185'>#</a></div><div class='texpara'><div id='flat.set.erasure-5.sentence-1' class='sentence'><i >Remarks</i>: Stable (<a href='algorithm.stable' title='16.4.6.8&emsp;Requirements for stable algorithms'>[algorithm.<span class='shy'></span>stable]</a>)<a class='hidden_link' href='#flat.set.erasure-5.sentence-1'>.</a></div> <div id='flat.set.erasure-5.sentence-2' class='sentence'>If an invocation of <span class='texttt'>erase_<span class='shy'></span>if</span> exits via an exception,
<span class='texttt'>c</span> is in a valid but unspecified state (<a href='defns.valid' title='3.65&emsp;valid but unspecified state'>[defns.<span class='shy'></span>valid]</a>)<a class='hidden_link' href='#flat.set.erasure-5.sentence-2'>.</a></div> <div id='flat.set.erasure-note-1' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#flat.set.erasure-note-1'>1</a></i>:&ensp;<div id='flat.set.erasure-5.sentence-3' class='sentence'><span class='texttt'>c</span> still meets its invariants, but can be empty<a class='hidden_link' href='#flat.set.erasure-5.sentence-3'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div></div></div></div></div><div id='flat.multiset' class='section'><h3 ><a class='secnum' href='#flat.multiset' style='min-width:80pt'>24.6.12</a> Class template <span class='texttt'>flat_<span class='shy'></span>multiset</span> <a class='abbr_ref' href='flat.multiset'>[flat.multiset]</a></h3><div id='flat.multiset.overview' class='section'><h4 ><a class='secnum' href='#flat.multiset.overview' style='min-width:95pt'>24.6.12.1</a> Overview <a class='abbr_ref' href='flat.multiset.overview'>[flat.multiset.overview]</a></h4><div class='para' id='flat.multiset.overview-1'><div class='marginalizedparent'><a class='marginalized' href='#flat.multiset.overview-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18199'>#</a></div><div class='texpara'><div id='flat.multiset.overview-1.sentence-1' class='sentence'><a class='index' id='lib:flat_multiset'></a>A <span class='texttt'>flat_<span class='shy'></span>multiset</span> is a container adaptor
that provides an associative container interface
that supports equivalent keys
(i.e., possibly containing multiple copies of the same key value) and
provides for fast retrieval of the keys themselves<a class='hidden_link' href='#flat.multiset.overview-1.sentence-1'>.</a></div> <div id='flat.multiset.overview-1.sentence-2' class='sentence'><span class='texttt'>flat_<span class='shy'></span>multiset</span> supports iterators that model the
<a href='iterator.concept.random.access#concept:random_access_iterator' title='25.3.4.13&emsp;Concept random_&shy;access_&shy;iterator&emsp;[iterator.concept.random.access]'><span id='conceptref:random_access_iterator___'><span class='texttt'>random_<span class='shy'></span>access_<span class='shy'></span>iterator</span></span></a> concept (<a href='iterator.concept.random.access' title='25.3.4.13&emsp;Concept random_&shy;access_&shy;iterator'>[iterator.<span class='shy'></span>concept.<span class='shy'></span>random.<span class='shy'></span>access]</a>)<a class='hidden_link' href='#flat.multiset.overview-1.sentence-2'>.</a></div></div></div><div class='para' id='flat.multiset.overview-2'><div class='marginalizedparent'><a class='marginalized' href='#flat.multiset.overview-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18209'>#</a></div><div class='texpara'><div id='flat.multiset.overview-2.sentence-1' class='sentence'>A <span class='texttt'>flat_<span class='shy'></span>multiset</span> meets all of the requirements
for a container (<a href='#container.reqmts' title='24.2.2.2&emsp;Container requirements'>[container.<span class='shy'></span>reqmts]</a>) and
for a reversible container (<a href='#container.rev.reqmts' title='24.2.2.3&emsp;Reversible container requirements'>[container.<span class='shy'></span>rev.<span class='shy'></span>reqmts]</a>),
plus the optional container requirements (<a href='#container.opt.reqmts' title='24.2.2.4&emsp;Optional container requirements'>[container.<span class='shy'></span>opt.<span class='shy'></span>reqmts]</a>)<a class='hidden_link' href='#flat.multiset.overview-2.sentence-1'>.</a></div> <div id='flat.multiset.overview-2.sentence-2' class='sentence'><span class='texttt'>flat_<span class='shy'></span>multiset</span> meets the requirements of
an associative container (<a href='#associative.reqmts' title='24.2.7&emsp;Associative containers'>[associative.<span class='shy'></span>reqmts]</a>), except that:
<ul class='itemize'><li id='flat.multiset.overview-2.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#flat.multiset.overview-2.1'>(2.1)</a></div>it does not meet the requirements
related to node handles (<a href='#container.node.overview' title='24.2.5.1&emsp;Overview'>[container.<span class='shy'></span>node.<span class='shy'></span>overview]</a>),</li><li id='flat.multiset.overview-2.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#flat.multiset.overview-2.2'>(2.2)</a></div>it does not meet the requirements related to iterator invalidation, and</li><li id='flat.multiset.overview-2.3'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#flat.multiset.overview-2.3'>(2.3)</a></div>the time complexity of the operations
that insert or erase a single element from the
set is linear,
including the ones that take an insertion position iterator<a class='hidden_link' href='#flat.multiset.overview-2.sentence-2'>.</a></li></ul></div> <div id='flat.multiset.overview-note-1' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#flat.multiset.overview-note-1'>1</a></i>:&ensp;<div id='flat.multiset.overview-2.sentence-3' class='sentence'>A <span class='texttt'>flat_<span class='shy'></span>multiset</span> does not meet
the additional requirements of an allocator-aware container,
as described in <a href='#container.alloc.reqmts' title='24.2.2.5&emsp;Allocator-aware containers'>[container.<span class='shy'></span>alloc.<span class='shy'></span>reqmts]</a><a class='hidden_link' href='#flat.multiset.overview-2.sentence-3'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div></div><div class='para' id='flat.multiset.overview-3'><div class='marginalizedparent'><a class='marginalized' href='#flat.multiset.overview-3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18234'>#</a></div><div class='texpara'><div id='flat.multiset.overview-3.sentence-1' class='sentence'>A <span class='texttt'>flat_<span class='shy'></span>multiset</span> also provides most operations
described in <a href='#associative.reqmts' title='24.2.7&emsp;Associative containers'>[associative.<span class='shy'></span>reqmts]</a> for equal keys<a class='hidden_link' href='#flat.multiset.overview-3.sentence-1'>.</a></div> <div id='flat.multiset.overview-3.sentence-2' class='sentence'>This means that a <span class='texttt'>flat_<span class='shy'></span>multiset</span> supports
the <span class='texttt'>a_<span class='shy'></span>eq</span> operations in <a href='#associative.reqmts' title='24.2.7&emsp;Associative containers'>[associative.<span class='shy'></span>reqmts]</a>
but not the <span class='texttt'>a_<span class='shy'></span>uniq</span> operations<a class='hidden_link' href='#flat.multiset.overview-3.sentence-2'>.</a></div> <div id='flat.multiset.overview-3.sentence-3' class='sentence'>For a <span class='texttt'>flat_<span class='shy'></span>multiset<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span></span>,
both the <span class='texttt'>key_<span class='shy'></span>type</span> and <span class='texttt'>value_<span class='shy'></span>type</span> are <span class='texttt'>Key</span><a class='hidden_link' href='#flat.multiset.overview-3.sentence-3'>.</a></div></div></div><div class='para' id='flat.multiset.overview-4'><div class='marginalizedparent'><a class='marginalized' href='#flat.multiset.overview-4'>4</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18243'>#</a></div><div class='texpara'><div id='flat.multiset.overview-4.sentence-1' class='sentence'>Descriptions are provided here only for operations on <span class='texttt'>flat_<span class='shy'></span>multiset</span>
that are not described in one of the general sections or
for operations where there is additional semantic information<a class='hidden_link' href='#flat.multiset.overview-4.sentence-1'>.</a></div></div></div><div class='para' id='flat.multiset.overview-5'><div class='marginalizedparent'><a class='marginalized' href='#flat.multiset.overview-5'>5</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18248'>#</a></div><div class='texpara'><div id='flat.multiset.overview-5.sentence-1' class='sentence'>A <span class='texttt'>flat_<span class='shy'></span>multiset</span> maintains the invariant
that the keys are sorted with respect to the comparison object<a class='hidden_link' href='#flat.multiset.overview-5.sentence-1'>.</a></div></div></div><div class='para' id='flat.multiset.overview-6'><div class='marginalizedparent'><a class='marginalized' href='#flat.multiset.overview-6'>6</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18252'>#</a></div><div class='texpara'><div id='flat.multiset.overview-6.sentence-1' class='sentence'>If any member function in <a href='#flat.multiset.defn' title='24.6.12.2&emsp;Definition'>[flat.<span class='shy'></span>multiset.<span class='shy'></span>defn]</a> exits via an exception,
the invariant is restored<a class='hidden_link' href='#flat.multiset.overview-6.sentence-1'>.</a></div> <div id='flat.multiset.overview-note-2' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#flat.multiset.overview-note-2'>2</a></i>:&ensp;<div id='flat.multiset.overview-6.sentence-2' class='sentence'>This can result in the <span class='texttt'>flat_<span class='shy'></span>multiset</span>'s being emptied<a class='hidden_link' href='#flat.multiset.overview-6.sentence-2'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div></div><div class='para' id='flat.multiset.overview-7'><div class='marginalizedparent'><a class='marginalized' href='#flat.multiset.overview-7'>7</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18259'>#</a></div><div class='texpara'><div id='flat.multiset.overview-7.sentence-1' class='sentence'>Any sequence container (<a href='#sequence.reqmts' title='24.2.4&emsp;Sequence containers'>[sequence.<span class='shy'></span>reqmts]</a>)
supporting <i >Cpp17RandomAccessIterator</i>
can be used to instantiate <span class='texttt'>flat_<span class='shy'></span>multiset</span><a class='hidden_link' href='#flat.multiset.overview-7.sentence-1'>.</a></div> <div id='flat.multiset.overview-7.sentence-2' class='sentence'>In particular,
<span class='texttt'>vector</span> (<a href='#vector' title='24.3.12&emsp;Class template vector'>[vector]</a>) and <span class='texttt'>deque</span> (<a href='#deque' title='24.3.9&emsp;Class template deque'>[deque]</a>) can be used<a class='hidden_link' href='#flat.multiset.overview-7.sentence-2'>.</a></div> <div id='flat.multiset.overview-note-3' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#flat.multiset.overview-note-3'>3</a></i>:&ensp;<div id='flat.multiset.overview-7.sentence-3' class='sentence'><span class='texttt'>vector<span class='anglebracket'>&lt;</span><span class='keyword'>bool</span><span class='anglebracket'>&gt;</span></span> is not a sequence container<a class='hidden_link' href='#flat.multiset.overview-7.sentence-3'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div></div><div class='para' id='flat.multiset.overview-8'><div class='marginalizedparent'><a class='marginalized' href='#flat.multiset.overview-8'>8</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18269'>#</a></div><div class='texpara'><div id='flat.multiset.overview-8.sentence-1' class='sentence'>The program is ill-formed if <span class='texttt'>Key</span> is not the same type
as <span class='texttt'>KeyContainer<span class='operator'>&#x200b;::&#x200b;</span>value_<span class='shy'></span>type</span><a class='hidden_link' href='#flat.multiset.overview-8.sentence-1'>.</a></div></div></div><div class='para' id='flat.multiset.overview-9'><div class='marginalizedparent'><a class='marginalized' href='#flat.multiset.overview-9'>9</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18273'>#</a></div><div class='texpara'><div id='flat.multiset.overview-9.sentence-1' class='sentence'>The effect of calling a constructor or member function
that takes a <span class='texttt'>sorted_<span class='shy'></span>equivalent_<span class='shy'></span>t</span> argument with a range
that is not sorted with respect to <span class='texttt'>key_<span class='shy'></span>comp<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> is undefined<a class='hidden_link' href='#flat.multiset.overview-9.sentence-1'>.</a></div></div></div>

<div class='para added' id=''><div class='marginalizedparent'><a class='marginalized' href='#flat.multiset.overview-10'>10</a></div><div class='sourceLinkParent'><a class='sourceLink' href=''>#</a></div>
<div class='texpara'>The types <span class="texttt">iterator</span> and <span class="texttt">const_iterator</span> meet the constexpr iterator requirements (<a href="iterator.requirements.general" title="25.3.1 General">[iterator.<span class="shy"></span>requirements.<span class="shy"></span>general]</a>).</div></div>

</div>



<div id='flat.multiset.defn' class='section'><h4 ><a class='secnum' href='#flat.multiset.defn' style='min-width:95pt'>24.6.12.2</a> Definition <a class='abbr_ref' href='flat.multiset.defn'>[flat.multiset.defn]</a></h4><div class='texpara'><span class='codeblock'><span class='keyword'>namespace</span> std <span class='curlybracket'>{</span>
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>, <span class='keyword'>class</span> KeyContainer <span class='operator'>=</span> vector<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
  <span class='keyword'>class</span> flat_multiset <span class='curlybracket'>{</span>
  <span class='keyword'>public</span><span class='operator'>:</span>
    <span class='comment'>// types</span>
    <span class='keyword'>using</span> key_type                  <span class='operator'>=</span> Key;
    <span class='keyword'>using</span> value_type                <span class='operator'>=</span> Key;
    <span class='keyword'>using</span> key_compare               <span class='operator'>=</span> Compare;
    <span class='keyword'>using</span> value_compare             <span class='operator'>=</span> Compare;
    <span class='keyword'>using</span> reference                 <span class='operator'>=</span> value_type<span class='operator'>&amp;</span>;
    <span class='keyword'>using</span> const_reference           <span class='operator'>=</span> <span class='keyword'>const</span> value_type<span class='operator'>&amp;</span>;
    <span class='keyword'>using</span> size_type                 <span class='operator'>=</span> <span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>size_type;
    <span class='keyword'>using</span> difference_type           <span class='operator'>=</span> <span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>difference_type;
    <span class='keyword'>using</span> iterator                  <span class='operator'>=</span> <a class='index' id=':type_of_flat_multiset::iterator'></a><i >implementation-defined</i>;  <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> const_iterator            <span class='operator'>=</span> <a class='index' id=':type_of_flat_multiset::const_iterator'></a><i >implementation-defined</i>;  <span class='comment'>// see <a href='#container.requirements' title='24.2&emsp;Requirements'>[container.<span class='shy'></span>requirements]</a></span>
    <span class='keyword'>using</span> reverse_iterator          <span class='operator'>=</span> std<span class='operator'>::</span>reverse_iterator<span class='anglebracket'>&lt;</span>iterator<span class='anglebracket'>&gt;</span>;
    <span class='keyword'>using</span> const_reverse_iterator    <span class='operator'>=</span> std<span class='operator'>::</span>reverse_iterator<span class='anglebracket'>&lt;</span>const_iterator<span class='anglebracket'>&gt;</span>;
    <span class='keyword'>using</span> container_type            <span class='operator'>=</span> KeyContainer;

    <span class='comment'>// <a href='#flat.multiset.cons' title='24.6.12.3&emsp;Constructors'>[flat.<span class='shy'></span>multiset.<span class='shy'></span>cons]</a>, constructors</span>
    <span class="keyword added">constexpr</span> flat_multiset<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>:</span> flat_multiset<span class='parenthesis'>(</span>key_compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>

    <span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> flat_multiset<span class='parenthesis'>(</span><span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp<span class='parenthesis'>)</span>
      <span class='operator'>:</span> <i >c</i><span class='parenthesis'>(</span><span class='parenthesis'>)</span>, <i >compare</i><span class='parenthesis'>(</span>comp<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>

    <span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> flat_multiset<span class='parenthesis'>(</span>container_type cont, <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> key_compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> flat_multiset<span class='parenthesis'>(</span>sorted_equivalent_t, container_type cont,
                  <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> key_compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>:</span> <i >c</i><span class='parenthesis'>(</span>std<span class='operator'>::</span>move<span class='parenthesis'>(</span>cont<span class='parenthesis'>)</span><span class='parenthesis'>)</span>, <i >compare</i><span class='parenthesis'>(</span>comp<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>

    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_multiset<span class='parenthesis'>(</span>InputIterator first, InputIterator last,
                    <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> key_compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
        <span class='operator'>:</span> <i >c</i><span class='parenthesis'>(</span><span class='parenthesis'>)</span>, <i >compare</i><span class='parenthesis'>(</span>comp<span class='parenthesis'>)</span>
        <span class='curlybracket'>{</span> insert<span class='parenthesis'>(</span>first, last<span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>

    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_multiset<span class='parenthesis'>(</span>sorted_equivalent_t, InputIterator first, InputIterator last,
                    <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> key_compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
        <span class='operator'>:</span> <i >c</i><span class='parenthesis'>(</span>first, last<span class='parenthesis'>)</span>, <i >compare</i><span class='parenthesis'>(</span>comp<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>

    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range_______________________________________________________________________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_multiset<span class='parenthesis'>(</span>from_range_t fr, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>
        <span class='operator'>:</span> flat_multiset<span class='parenthesis'>(</span>fr, std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>rg<span class='parenthesis'>)</span>, key_compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range________________________________________________________________________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_multiset<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp<span class='parenthesis'>)</span>
        <span class='operator'>:</span> flat_multiset<span class='parenthesis'>(</span>comp<span class='parenthesis'>)</span>
        <span class='curlybracket'>{</span> insert_range<span class='parenthesis'>(</span>std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>rg<span class='parenthesis'>)</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>

    <span class="keyword added">constexpr</span> flat_multiset<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il, <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> key_compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>:</span> flat_multiset<span class='parenthesis'>(</span>il<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, il<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, comp<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>

    <span class="keyword added">constexpr</span> flat_multiset<span class='parenthesis'>(</span>sorted_equivalent_t s, initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il,
                  <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> key_compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
        <span class='operator'>:</span> flat_multiset<span class='parenthesis'>(</span>s, il<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, il<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, comp<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>

    <span class='comment'>// <a href='#flat.multiset.cons.alloc' title='24.6.12.4&emsp;Constructors with allocators'>[flat.<span class='shy'></span>multiset.<span class='shy'></span>cons.<span class='shy'></span>alloc]</a>, constructors with allocators</span>

    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> flat_multiset<span class='parenthesis'>(</span><span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_multiset<span class='parenthesis'>(</span><span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_multiset<span class='parenthesis'>(</span><span class='keyword'>const</span> container_type<span class='operator'>&amp;</span> cont, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_multiset<span class='parenthesis'>(</span><span class='keyword'>const</span> container_type<span class='operator'>&amp;</span> cont, <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_multiset<span class='parenthesis'>(</span>sorted_equivalent_t, <span class='keyword'>const</span> container_type<span class='operator'>&amp;</span> cont, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_multiset<span class='parenthesis'>(</span>sorted_equivalent_t, <span class='keyword'>const</span> container_type<span class='operator'>&amp;</span> cont,
                    <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_multiset<span class='parenthesis'>(</span><span class='keyword'>const</span> flat_multiset<span class='operator'>&amp;</span>, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_multiset<span class='parenthesis'>(</span>flat_multiset<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_multiset<span class='parenthesis'>(</span>InputIterator first, InputIterator last, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_multiset<span class='parenthesis'>(</span>InputIterator first, InputIterator last,
                    <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_multiset<span class='parenthesis'>(</span>sorted_equivalent_t, InputIterator first, InputIterator last,
                    <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_multiset<span class='parenthesis'>(</span>sorted_equivalent_t, InputIterator first, InputIterator last,
                    <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range_________________________________________________________________________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_multiset<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range__________________________________________________________________________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_multiset<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_multiset<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_multiset<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il, <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp,
                    <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_multiset<span class='parenthesis'>(</span>sorted_equivalent_t, initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> flat_multiset<span class='parenthesis'>(</span>sorted_equivalent_t, initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il,
                    <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> flat_multiset<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;

    <span class='comment'>// iterators</span>
    <span class="keyword added">constexpr</span> iterator               begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator         begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> iterator               end<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator         end<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class="keyword added">constexpr</span> reverse_iterator       rbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_reverse_iterator rbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> reverse_iterator       rend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_reverse_iterator rend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class="keyword added">constexpr</span> const_iterator         cbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_iterator         cend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_reverse_iterator crbegin<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> const_reverse_iterator crend<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// capacity</span>
    <span class='squarebracket'>[</span><span class='squarebracket'>[</span>nodiscard<span class='squarebracket'>]</span><span class='squarebracket'>]</span> <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> size_type size<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> size_type max_size<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// <a href='#flat.multiset.modifiers' title='24.6.12.5&emsp;Modifiers'>[flat.<span class='shy'></span>multiset.<span class='shy'></span>modifiers]</a>, modifiers</span>
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator emplace<span class='parenthesis'>(</span>Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> iterator emplace_hint<span class='parenthesis'>(</span>const_iterator position, Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span><span class='keyword'>const</span> value_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>
      <span class='curlybracket'>{</span> <span class='keyword'>return</span> emplace<span class='parenthesis'>(</span>x<span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>value_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>
      <span class='curlybracket'>{</span> <span class='keyword'>return</span> emplace<span class='parenthesis'>(</span>std<span class='operator'>::</span>move<span class='parenthesis'>(</span>x<span class='parenthesis'>)</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, <span class='keyword'>const</span> value_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>
      <span class='curlybracket'>{</span> <span class='keyword'>return</span> emplace_hint<span class='parenthesis'>(</span>position, x<span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> iterator insert<span class='parenthesis'>(</span>const_iterator position, value_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>
      <span class='curlybracket'>{</span> <span class='keyword'>return</span> emplace_hint<span class='parenthesis'>(</span>position, std<span class='operator'>::</span>move<span class='parenthesis'>(</span>x<span class='parenthesis'>)</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>

    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert<span class='parenthesis'>(</span>InputIterator first, InputIterator last<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert<span class='parenthesis'>(</span>sorted_equivalent_t, InputIterator first, InputIterator last<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range___________________________________________________________________________________________________________________________________'><span class='tcode_in_codeblock'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert_range<span class='parenthesis'>(</span>R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il<span class='parenthesis'>)</span>
      <span class='curlybracket'>{</span> insert<span class='parenthesis'>(</span>il<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, il<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert<span class='parenthesis'>(</span>sorted_equivalent_t s, initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il<span class='parenthesis'>)</span>
      <span class='curlybracket'>{</span> insert<span class='parenthesis'>(</span>s, il<span class='operator'>.</span>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, il<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>

    <span class="keyword added">constexpr</span> container_type extract<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> replace<span class='parenthesis'>(</span>container_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> iterator erase<span class='parenthesis'>(</span>iterator position<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator erase<span class='parenthesis'>(</span>const_iterator position<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> size_type erase<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> size_type erase<span class='parenthesis'>(</span>K<span class='operator'>&amp;</span><span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> iterator erase<span class='parenthesis'>(</span>const_iterator first, const_iterator last<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> swap<span class='parenthesis'>(</span>flat_multiset<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
    <span class="keyword added">constexpr</span> <span class='keyword'>void</span> clear<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;

    <span class='comment'>// observers</span>
    <span class="keyword added">constexpr</span> key_compare key_comp<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class="keyword added">constexpr</span> value_compare value_comp<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class='comment'>// set operations</span>
    <span class="keyword added">constexpr</span> iterator find<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> const_iterator find<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator find<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> const_iterator find<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="keyword added">constexpr</span> size_type count<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> size_type count<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> contains<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> <span class='keyword'>bool</span> contains<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="keyword added">constexpr</span> iterator lower_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> const_iterator lower_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator lower_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> const_iterator lower_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="keyword added">constexpr</span> iterator upper_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> const_iterator upper_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator upper_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> const_iterator upper_bound<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, iterator<span class='anglebracket'>&gt;</span> equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>const_iterator, const_iterator<span class='anglebracket'>&gt;</span> equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> key_type<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>iterator, iterator<span class='anglebracket'>&gt;</span> equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span>;
    <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> K<span class='anglebracket'>&gt;</span>
      <span class="keyword added">constexpr</span> pair<span class='anglebracket'>&lt;</span>const_iterator, const_iterator<span class='anglebracket'>&gt;</span> equal_range<span class='parenthesis'>(</span><span class='keyword'>const</span> K<span class='operator'>&amp;</span> x<span class='parenthesis'>)</span> <span class='keyword'>const</span>;

    <span class="keyword added">constexpr</span> <span class='keyword'>friend</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> flat_multiset<span class='operator'>&amp;</span> x, <span class='keyword'>const</span> flat_multiset<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> <span class='keyword'>friend</span> <i >synth-three-way-result</i><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span>
      <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='operator'>=</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='keyword'>const</span> flat_multiset<span class='operator'>&amp;</span> x, <span class='keyword'>const</span> flat_multiset<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span>;

    <span class="keyword added">constexpr</span> <span class='keyword'>friend</span> <span class='keyword'>void</span> swap<span class='parenthesis'>(</span>flat_multiset<span class='operator'>&amp;</span> x, flat_multiset<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>
      <span class='curlybracket'>{</span> x<span class='operator'>.</span>swap<span class='parenthesis'>(</span>y<span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>

  <span class='keyword'>private</span><span class='operator'>:</span>
    container_type <i >c</i>;           <span class='comment'>// <i >exposition only</i></span>
    key_compare <i >compare</i>;        <span class='comment'>// <i >exposition only</i></span>
  <span class='curlybracket'>}</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> KeyContainer, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>value_type<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    flat_multiset<span class='parenthesis'>(</span>KeyContainer, Compare <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_multiset<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>value_type, Compare, KeyContainer<span class='anglebracket'>&gt;</span>;
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> KeyContainer, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    flat_multiset<span class='parenthesis'>(</span>KeyContainer, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_multiset<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>value_type,
                       less<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>value_type<span class='anglebracket'>&gt;</span>, KeyContainer<span class='anglebracket'>&gt;</span>;
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> KeyContainer, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    flat_multiset<span class='parenthesis'>(</span>KeyContainer, Compare, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_multiset<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>value_type, Compare, KeyContainer<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> KeyContainer, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>value_type<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    flat_multiset<span class='parenthesis'>(</span>sorted_equivalent_t, KeyContainer, Compare <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_multiset<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>value_type, Compare, KeyContainer<span class='anglebracket'>&gt;</span>;
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> KeyContainer, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    flat_multiset<span class='parenthesis'>(</span>sorted_equivalent_t, KeyContainer, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_multiset<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>value_type,
                       less<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>value_type<span class='anglebracket'>&gt;</span>, KeyContainer<span class='anglebracket'>&gt;</span>;
  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> KeyContainer, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    flat_multiset<span class='parenthesis'>(</span>sorted_equivalent_t, KeyContainer, Compare, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_multiset<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> KeyContainer<span class='operator'>::</span>value_type, Compare, KeyContainer<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    flat_multiset<span class='parenthesis'>(</span>InputIterator, InputIterator, Compare <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_multiset<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>, Compare<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    flat_multiset<span class='parenthesis'>(</span>sorted_equivalent_t, InputIterator, InputIterator, Compare <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_multiset<span class='anglebracket'>&lt;</span><i >iter-value-type</i><span class='anglebracket'>&lt;</span>InputIterator<span class='anglebracket'>&gt;</span>, Compare<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range_____________________________________________'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
           <span class='keyword'>class</span> Allocator <span class='operator'>=</span> allocator<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    flat_multiset<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, Compare <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, Allocator <span class='operator'>=</span> Allocator<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_multiset<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, Compare,
                       vector<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>,
                              <i >alloc-rebind</i><span class='anglebracket'>&lt;</span>Allocator, ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span><a href='range.refinements#concept:input_range' title='26.4.5&emsp;Other range refinements&emsp;[range.refinements]'><span id='conceptref:input_range______________________________________________'><span class='tcode_in_codeblock'>input_<span class='shy'></span>range</span></span></a> R, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    flat_multiset<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, Allocator<span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_multiset<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>, less<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>,
                       vector<span class='anglebracket'>&lt;</span>ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span>,
                              <i >alloc-rebind</i><span class='anglebracket'>&lt;</span>Allocator, ranges<span class='operator'>::</span>range_value_t<span class='anglebracket'>&lt;</span>R<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
    flat_multiset<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>, Compare <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_multiset<span class='anglebracket'>&lt;</span>Key, Compare<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> Compare <span class='operator'>=</span> less<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
  flat_multiset<span class='parenthesis'>(</span>sorted_equivalent_t, initializer_list<span class='anglebracket'>&lt;</span>Key<span class='anglebracket'>&gt;</span>, Compare <span class='operator'>=</span> Compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
      <span class='operator'>-</span><span class='anglebracket'>&gt;</span> flat_multiset<span class='anglebracket'>&lt;</span>Key, Compare<span class='anglebracket'>&gt;</span>;

  <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> KeyContainer, <span class='keyword'>class</span> Allocator<span class='anglebracket'>&gt;</span>
    <span class='keyword'>struct</span> uses_allocator<span class='anglebracket'>&lt;</span>flat_multiset<span class='anglebracket'>&lt;</span>Key, Compare, KeyContainer<span class='anglebracket'>&gt;</span>, Allocator<span class='anglebracket'>&gt;</span>
      <span class='operator'>:</span> bool_constant<span class='anglebracket'>&lt;</span>uses_allocator_v<span class='anglebracket'>&lt;</span>KeyContainer, Allocator<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span> <span class='curlybracket'>{</span> <span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></div></div><div id='flat.multiset.cons' class='section'><h4 ><a class='secnum' href='#flat.multiset.cons' style='min-width:95pt'>24.6.12.3</a> Constructors <a class='abbr_ref' href='flat.multiset.cons'>[flat.multiset.cons]</a></h4><div class='texpara'><div id='lib:flat_multiset,constructor'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:flat_multiset,constructor'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> flat_multiset<span class='parenthesis'>(</span>container_type cont, <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp <span class='operator'>=</span> key_compare<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='flat.multiset.cons-1'><div class='marginalizedparent'><a class='marginalized' href='#flat.multiset.cons-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18555'>#</a></div><div class='texpara'><div id='flat.multiset.cons-1.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'><i >c</i></span> with <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>move<span class='parenthesis'>(</span>cont<span class='parenthesis'>)</span></span> and
<span class='texttt'><i >compare</i></span> with <span class='texttt'>comp</span>, and
sorts the range [<span class='texttt'>begin<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, end<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>) with respect to <span class='texttt'><i >compare</i></span><a class='hidden_link' href='#flat.multiset.cons-1.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.multiset.cons-2'><div class='marginalizedparent'><a class='marginalized' href='#flat.multiset.cons-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18561'>#</a></div><div class='texpara'><div id='flat.multiset.cons-2.sentence-1' class='sentence'><i >Complexity</i>: Linear in <span class='math'><span class='mathalpha'>N</span></span> if <span class='texttt'>cont</span> is already sorted with respect to <span class='texttt'><i >compare</i></span> and
otherwise <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.085em;">N</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">log</span></span><span class="mjx-mo"><span class="mjx-char"></span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.085em;">N</span></span></span></span></span></span>, where <span class='math'><span class='mathalpha'>N</span></span> is the value of <span class='texttt'>cont<span class='operator'>.</span>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> before this call<a class='hidden_link' href='#flat.multiset.cons-2.sentence-1'>.</a></div></div></div></div></div><div id='flat.multiset.cons.alloc' class='section'><h4 ><a class='secnum' href='#flat.multiset.cons.alloc' style='min-width:95pt'>24.6.12.4</a> Constructors with allocators <a class='abbr_ref' href='flat.multiset.cons.alloc'>[flat.multiset.cons.alloc]</a></h4><div class='para' id='flat.multiset.cons.alloc-1'><div class='marginalizedparent'><a class='marginalized' href='#flat.multiset.cons.alloc-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18569'>#</a></div><div class='texpara'><div id='flat.multiset.cons.alloc-1.sentence-1' class='sentence'>The constructors in this subclause shall not participate in overload resolution
unless <span class='texttt'>uses_<span class='shy'></span>allocator_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>container_<span class='shy'></span>type, Alloc<span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#flat.multiset.cons.alloc-1.sentence-1'>.</a></div></div></div><div class='texpara'><div id='lib:flat_multiset,constructor_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:flat_multiset,constructor_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_multiset<span class='parenthesis'>(</span><span class='keyword'>const</span> container_type<span class='operator'>&amp;</span> cont, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_multiset<span class='parenthesis'>(</span><span class='keyword'>const</span> container_type<span class='operator'>&amp;</span> cont, <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='flat.multiset.cons.alloc-2'><div class='marginalizedparent'><a class='marginalized' href='#flat.multiset.cons.alloc-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18582'>#</a></div><div class='texpara'><div id='flat.multiset.cons.alloc-2.sentence-1' class='sentence'><i >Effects</i>: Equivalent to <span class='texttt'>flat_<span class='shy'></span>multiset<span class='parenthesis'>(</span>cont<span class='parenthesis'>)</span></span> and
<span class='texttt'>flat_<span class='shy'></span>multiset<span class='parenthesis'>(</span>cont, comp<span class='parenthesis'>)</span></span>, respectively,
except that <span class='texttt'><i >c</i></span> is constructed with
uses-allocator construction (<a href='allocator.uses.construction' title='20.2.8.2&emsp;Uses-allocator construction'>[allocator.<span class='shy'></span>uses.<span class='shy'></span>construction]</a>)<a class='hidden_link' href='#flat.multiset.cons.alloc-2.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.multiset.cons.alloc-3'><div class='marginalizedparent'><a class='marginalized' href='#flat.multiset.cons.alloc-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18589'>#</a></div><div class='texpara'><div id='flat.multiset.cons.alloc-3.sentence-1' class='sentence'><i >Complexity</i>: Same as <span class='texttt'>flat_<span class='shy'></span>multiset<span class='parenthesis'>(</span>cont<span class='parenthesis'>)</span></span> and
<span class='texttt'>flat_<span class='shy'></span>multiset<span class='parenthesis'>(</span>cont, comp<span class='parenthesis'>)</span></span>, respectively<a class='hidden_link' href='#flat.multiset.cons.alloc-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:flat_multiset,constructor__'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:flat_multiset,constructor__'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_multiset<span class='parenthesis'>(</span>sorted_equivalent_t s, <span class='keyword'>const</span> container_type<span class='operator'>&amp;</span> cont, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_multiset<span class='parenthesis'>(</span>sorted_equivalent_t s, <span class='keyword'>const</span> container_type<span class='operator'>&amp;</span> cont,
                <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='flat.multiset.cons.alloc-4'><div class='marginalizedparent'><a class='marginalized' href='#flat.multiset.cons.alloc-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18605'>#</a></div><div class='texpara'><div id='flat.multiset.cons.alloc-4.sentence-1' class='sentence'><i >Effects</i>: Equivalent to <span class='texttt'>flat_<span class='shy'></span>multiset<span class='parenthesis'>(</span>s, cont<span class='parenthesis'>)</span></span> and
<span class='texttt'>flat_<span class='shy'></span>multiset<span class='parenthesis'>(</span>s, cont, comp<span class='parenthesis'>)</span></span>, respectively,
except that <span class='texttt'><i >c</i></span> is constructed with
uses-allocator construction (<a href='allocator.uses.construction' title='20.2.8.2&emsp;Uses-allocator construction'>[allocator.<span class='shy'></span>uses.<span class='shy'></span>construction]</a>)<a class='hidden_link' href='#flat.multiset.cons.alloc-4.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.multiset.cons.alloc-5'><div class='marginalizedparent'><a class='marginalized' href='#flat.multiset.cons.alloc-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18612'>#</a></div><div class='texpara'><div id='flat.multiset.cons.alloc-5.sentence-1' class='sentence'><i >Complexity</i>: Linear<a class='hidden_link' href='#flat.multiset.cons.alloc-5.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:flat_multiset,constructor___'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:flat_multiset,constructor___'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>explicit</span> flat_multiset<span class='parenthesis'>(</span><span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_multiset<span class='parenthesis'>(</span><span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_multiset<span class='parenthesis'>(</span><span class='keyword'>const</span> flat_multiset<span class='operator'>&amp;</span>, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_multiset<span class='parenthesis'>(</span>flat_multiset<span class='operator'>&amp;</span><span class='operator'>&amp;</span>, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_multiset<span class='parenthesis'>(</span>InputIterator first, InputIterator last, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_multiset<span class='parenthesis'>(</span>InputIterator first, InputIterator last,
                <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_multiset<span class='parenthesis'>(</span>sorted_equivalent_t, InputIterator first, InputIterator last, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_multiset<span class='parenthesis'>(</span>sorted_equivalent_t, InputIterator first, InputIterator last,
                <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range____________________________________________________________________________________________________________________________________'><span class='texttt'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_multiset<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:container-compatible-range' title='24.2.2.1&emsp;Introduction&emsp;[container.intro.reqmts]'><span id='conceptref:container-compatible-range_____________________________________________________________________________________________________________________________________'><span class='texttt'><i >container-compatible-range</i></span></span></a><span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> R, <span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_multiset<span class='parenthesis'>(</span>from_range_t, R<span class='operator'>&amp;</span><span class='operator'>&amp;</span> rg, <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_multiset<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_multiset<span class='parenthesis'>(</span>initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il, <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_multiset<span class='parenthesis'>(</span>sorted_equivalent_t, initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Alloc<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> flat_multiset<span class='parenthesis'>(</span>sorted_equivalent_t, initializer_list<span class='anglebracket'>&lt;</span>value_type<span class='anglebracket'>&gt;</span> il,
                <span class='keyword'>const</span> key_compare<span class='operator'>&amp;</span> comp, <span class='keyword'>const</span> Alloc<span class='operator'>&amp;</span> a<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='flat.multiset.cons.alloc-6'><div class='marginalizedparent'><a class='marginalized' href='#flat.multiset.cons.alloc-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18653'>#</a></div><div class='texpara'><div id='flat.multiset.cons.alloc-6.sentence-1' class='sentence'><i >Effects</i>: Equivalent to the corresponding non-allocator constructors
except that <span class='texttt'><i >c</i></span> is constructed with
uses-allocator construction (<a href='allocator.uses.construction' title='20.2.8.2&emsp;Uses-allocator construction'>[allocator.<span class='shy'></span>uses.<span class='shy'></span>construction]</a>)<a class='hidden_link' href='#flat.multiset.cons.alloc-6.sentence-1'>.</a></div></div></div></div></div><div id='flat.multiset.modifiers' class='section'><h4 ><a class='secnum' href='#flat.multiset.modifiers' style='min-width:95pt'>24.6.12.5</a> Modifiers <a class='abbr_ref' href='flat.multiset.modifiers'>[flat.multiset.modifiers]</a></h4><div class='texpara'><div id='lib:flat_multiset,emplace'><div id='lib:emplace,flat_multiset'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:emplace,flat_multiset'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span> <span class="keyword added">constexpr</span> iterator emplace<span class='parenthesis'>(</span>Args<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> args<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='flat.multiset.modifiers-1'><div class='marginalizedparent'><a class='marginalized' href='#flat.multiset.modifiers-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18668'>#</a></div><div class='texpara'><div id='flat.multiset.modifiers-1.sentence-1' class='sentence'><i >Constraints</i>: <span class='texttt'>is_<span class='shy'></span>constructible_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>value_<span class='shy'></span>type, Args<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#flat.multiset.modifiers-1.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.multiset.modifiers-2'><div class='marginalizedparent'><a class='marginalized' href='#flat.multiset.modifiers-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18672'>#</a></div><div class='texpara'><div id='flat.multiset.modifiers-2.sentence-1' class='sentence'><i >Effects</i>: First, initializes an object <span class='texttt'>t</span> of type <span class='texttt'>value_<span class='shy'></span>type</span>
with <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>Args<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>args<span class='parenthesis'>)</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span></span>,
then inserts <span class='texttt'>t</span> as if by:
<span class='codeblock'><span class='keyword'>auto</span> it <span class='operator'>=</span> ranges<span class='operator'>::</span>upper_bound<span class='parenthesis'>(</span>c, t, compare<span class='parenthesis'>)</span>;
c<span class='operator'>.</span>insert<span class='parenthesis'>(</span>it, std<span class='operator'>::</span>move<span class='parenthesis'>(</span>t<span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</span></div></div></div></div><div class='para' id='flat.multiset.modifiers-3'><div class='marginalizedparent'><a class='marginalized' href='#flat.multiset.modifiers-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18682'>#</a></div><div class='texpara'><div id='flat.multiset.modifiers-3.sentence-1' class='sentence'><i >Returns</i>: An iterator that points to the inserted element<a class='hidden_link' href='#flat.multiset.modifiers-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:flat_multiset,insert'><div id='lib:insert,flat_multiset'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:insert,flat_multiset'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert<span class='parenthesis'>(</span>InputIterator first, InputIterator last<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='flat.multiset.modifiers-4'><div class='marginalizedparent'><a class='marginalized' href='#flat.multiset.modifiers-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18694'>#</a></div><div class='texpara'><div id='flat.multiset.modifiers-4.sentence-1' class='sentence'><i >Effects</i>: Adds elements to <span class='texttt'><i >c</i></span> as if by:
<span class='codeblock'>c<span class='operator'>.</span>insert<span class='parenthesis'>(</span>c<span class='operator'>.</span>end<span class='parenthesis'>(</span><span class='parenthesis'>)</span>, first, last<span class='parenthesis'>)</span>;
</span></div> <div id='flat.multiset.modifiers-4.sentence-2' class='sentence'>
Then, sorts the range of newly inserted elements with respect to <span class='texttt'><i >compare</i></span>,
and merges the resulting sorted range and
the sorted range of pre-existing elements into a single sorted range<a class='hidden_link' href='#flat.multiset.modifiers-4.sentence-2'>.</a></div></div></div></div><div class='para' id='flat.multiset.modifiers-5'><div class='marginalizedparent'><a class='marginalized' href='#flat.multiset.modifiers-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18704'>#</a></div><div class='texpara'><div id='flat.multiset.modifiers-5.sentence-1' class='sentence'><i >Complexity</i>: <span class='math'><span class='mathalpha'>N</span></span> + <span class='math'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.081em;">M</span></span><span class="mjx-mi MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">log</span></span><span class="mjx-mo"><span class="mjx-char"></span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.081em;">M</span></span></span></span></span></span>, where <span class='math'><span class='mathalpha'>N</span></span> is <span class='texttt'>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> before the operation and <span class='math'><span class='mathalpha'>M</span></span>
is <span class='texttt'>distance<span class='parenthesis'>(</span>first, last<span class='parenthesis'>)</span></span><a class='hidden_link' href='#flat.multiset.modifiers-5.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.multiset.modifiers-6'><div class='marginalizedparent'><a class='marginalized' href='#flat.multiset.modifiers-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18709'>#</a></div><div class='texpara'><div id='flat.multiset.modifiers-6.sentence-1' class='sentence'><i >Remarks</i>: Since this operation performs an in-place merge, it may allocate memory<a class='hidden_link' href='#flat.multiset.modifiers-6.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:flat_multiset,insert_'><div id='lib:insert,flat_multiset_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:insert,flat_multiset_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> InputIterator<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>void</span> insert<span class='parenthesis'>(</span>sorted_equivalent_t, InputIterator first, InputIterator last<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='flat.multiset.modifiers-7'><div class='marginalizedparent'><a class='marginalized' href='#flat.multiset.modifiers-7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18721'>#</a></div><div class='texpara'><div id='flat.multiset.modifiers-7.sentence-1' class='sentence'><i >Effects</i>: Equivalent to <span class='texttt'>insert<span class='parenthesis'>(</span>first, last<span class='parenthesis'>)</span></span><a class='hidden_link' href='#flat.multiset.modifiers-7.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.multiset.modifiers-8'><div class='marginalizedparent'><a class='marginalized' href='#flat.multiset.modifiers-8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18725'>#</a></div><div class='texpara'><div id='flat.multiset.modifiers-8.sentence-1' class='sentence'><i >Complexity</i>: Linear<a class='hidden_link' href='#flat.multiset.modifiers-8.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:flat_multiset,swap'><div id='lib:swap,flat_multiset'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:swap,flat_multiset'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>void</span> swap<span class='parenthesis'>(</span>flat_multiset<span class='operator'>&amp;</span> y<span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
</code></div></div></div></div><div class='para' id='flat.multiset.modifiers-9'><div class='marginalizedparent'><a class='marginalized' href='#flat.multiset.modifiers-9'>9</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18736'>#</a></div><div class='texpara'><div id='flat.multiset.modifiers-9.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'>ranges<span class='operator'>::</span>swap<span class='parenthesis'>(</span>compare, y<span class='operator'>.</span>compare<span class='parenthesis'>)</span>;
ranges<span class='operator'>::</span>swap<span class='parenthesis'>(</span>c, y<span class='operator'>.</span>c<span class='parenthesis'>)</span>;
</span></div></div></div></div><div class='texpara'><div id='lib:flat_multiset,extract'><div id='lib:extract,flat_multiset'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:extract,flat_multiset'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> container_type extract<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>;
</code></div></div></div></div><div class='para' id='flat.multiset.modifiers-10'><div class='marginalizedparent'><a class='marginalized' href='#flat.multiset.modifiers-10'>10</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18751'>#</a></div><div class='texpara'><div id='flat.multiset.modifiers-10.sentence-1' class='sentence'><i >Postconditions</i>: <span class='texttt'><span class='operator'>*</span><span class='keyword'>this</span></span> is emptied, even if the function exits via an exception<a class='hidden_link' href='#flat.multiset.modifiers-10.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.multiset.modifiers-11'><div class='marginalizedparent'><a class='marginalized' href='#flat.multiset.modifiers-11'>11</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18755'>#</a></div><div class='texpara'><div id='flat.multiset.modifiers-11.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>move<span class='parenthesis'>(</span>c<span class='parenthesis'>)</span></span><a class='hidden_link' href='#flat.multiset.modifiers-11.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:flat_multiset,replace'><div id='lib:replace,flat_multiset'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:replace,flat_multiset'>🔗</a></div><code class='itemdeclcode'><span class="keyword added">constexpr</span> <span class='keyword'>void</span> replace<span class='parenthesis'>(</span>container_type<span class='operator'>&amp;</span><span class='operator'>&amp;</span> cont<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='flat.multiset.modifiers-12'><div class='marginalizedparent'><a class='marginalized' href='#flat.multiset.modifiers-12'>12</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18766'>#</a></div><div class='texpara'><div id='flat.multiset.modifiers-12.sentence-1' class='sentence'><i >Preconditions</i>: The elements of <span class='texttt'>cont</span> are sorted with respect to <span class='texttt'><i >compare</i></span><a class='hidden_link' href='#flat.multiset.modifiers-12.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.multiset.modifiers-13'><div class='marginalizedparent'><a class='marginalized' href='#flat.multiset.modifiers-13'>13</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18770'>#</a></div><div class='texpara'><div id='flat.multiset.modifiers-13.sentence-1' class='sentence'><i >Effects</i>: Equivalent to: <span class='texttt'>c <span class='operator'>=</span> std<span class='operator'>&#x200b;::&#x200b;</span>move<span class='parenthesis'>(</span>cont<span class='parenthesis'>)</span>;</span></div></div></div></div></div><div id='flat.multiset.erasure' class='section'><h4 ><a class='secnum' href='#flat.multiset.erasure' style='min-width:95pt'>24.6.12.6</a> Erasure <a class='abbr_ref' href='flat.multiset.erasure'>[flat.multiset.erasure]</a></h4><div class='texpara'><div id='lib:flat_multiset,erase_if'><div id='lib:erase_if,flat_multiset'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:erase_if,flat_multiset'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>class</span> Key, <span class='keyword'>class</span> Compare, <span class='keyword'>class</span> KeyContainer, <span class='keyword'>class</span> Predicate<span class='anglebracket'>&gt;</span>
  <span class="keyword added">constexpr</span> <span class='keyword'>typename</span> flat_multiset<span class='anglebracket'>&lt;</span>Key, Compare, KeyContainer<span class='anglebracket'>&gt;</span><span class='operator'>::</span>size_type
    erase_if<span class='parenthesis'>(</span>flat_multiset<span class='anglebracket'>&lt;</span>Key, Compare, KeyContainer<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> c, Predicate pred<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='flat.multiset.erasure-1'><div class='marginalizedparent'><a class='marginalized' href='#flat.multiset.erasure-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18785'>#</a></div><div class='texpara'><div id='flat.multiset.erasure-1.sentence-1' class='sentence'><i >Preconditions</i>: <span class='texttt'>Key</span> meets the <i >Cpp17MoveAssignable</i> requirements<a class='hidden_link' href='#flat.multiset.erasure-1.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.multiset.erasure-2'><div class='marginalizedparent'><a class='marginalized' href='#flat.multiset.erasure-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18789'>#</a></div><div class='texpara'><div id='flat.multiset.erasure-2.sentence-1' class='sentence'><i >Effects</i>: Let <span class='math'><span class='mathalpha'>E</span></span> be <span class='texttt'><span class='keyword'>bool</span><span class='parenthesis'>(</span>pred<span class='parenthesis'>(</span>as_<span class='shy'></span>const<span class='parenthesis'>(</span>e<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#flat.multiset.erasure-2.sentence-1'>.</a></div> <div id='flat.multiset.erasure-2.sentence-2' class='sentence'>Erases all elements <span class='texttt'>e</span> in <span class='texttt'>c</span> for which <span class='math'><span class='mathalpha'>E</span></span> holds<a class='hidden_link' href='#flat.multiset.erasure-2.sentence-2'>.</a></div></div></div></div><div class='para' id='flat.multiset.erasure-3'><div class='marginalizedparent'><a class='marginalized' href='#flat.multiset.erasure-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18794'>#</a></div><div class='texpara'><div id='flat.multiset.erasure-3.sentence-1' class='sentence'><i >Returns</i>: The number of elements erased<a class='hidden_link' href='#flat.multiset.erasure-3.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.multiset.erasure-4'><div class='marginalizedparent'><a class='marginalized' href='#flat.multiset.erasure-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18798'>#</a></div><div class='texpara'><div id='flat.multiset.erasure-4.sentence-1' class='sentence'><i >Complexity</i>: Exactly <span class='texttt'>c<span class='operator'>.</span>size<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> applications of the predicate<a class='hidden_link' href='#flat.multiset.erasure-4.sentence-1'>.</a></div></div></div></div><div class='para' id='flat.multiset.erasure-5'><div class='marginalizedparent'><a class='marginalized' href='#flat.multiset.erasure-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='http://github.com/Eelis/draft/tree/30d257d99d9fae52f7f536f652626d96f28fb808/source/containers.tex#L18802'>#</a></div><div class='texpara'><div id='flat.multiset.erasure-5.sentence-1' class='sentence'><i >Remarks</i>: Stable (<a href='algorithm.stable' title='16.4.6.8&emsp;Requirements for stable algorithms'>[algorithm.<span class='shy'></span>stable]</a>)<a class='hidden_link' href='#flat.multiset.erasure-5.sentence-1'>.</a></div> <div id='flat.multiset.erasure-5.sentence-2' class='sentence'>If an invocation of <span class='texttt'>erase_<span class='shy'></span>if</span> exits via an exception,
<span class='texttt'>c</span> is in a valid but unspecified state (<a href='defns.valid' title='3.65&emsp;valid but unspecified state'>[defns.<span class='shy'></span>valid]</a>)<a class='hidden_link' href='#flat.multiset.erasure-5.sentence-2'>.</a></div> <div id='flat.multiset.erasure-note-1' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#flat.multiset.erasure-note-1'>1</a></i>:&ensp;<div id='flat.multiset.erasure-5.sentence-3' class='sentence'><span class='texttt'>c</span> still meets its invariants, but can be empty<a class='hidden_link' href='#flat.multiset.erasure-5.sentence-3'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div></div></div></div></div></div>


	</div>
	<h3 id="feature-test-macros"><a href="#feature-test-macros">Feature test macros</a></h3>
	<div class="wording">
	<h2><a href="http://eel.is/c++draft/version.syn">17.3.2 Header &lt;version&gt; synopsis [version.syn]</a></h2>
  <div><span class="added"><code>#define __cpp_lib_constexpr_deque 2025??L // also in &lt;deque&gt;</code></span></div>
  <div><span class="added"><code>#define __cpp_lib_constexpr_flat_map 2025??L // also in &lt;flat_map&gt;</code></span></div>
  <div><span class="added"><code>#define __cpp_lib_constexpr_flat_set 2025??L // also in &lt;flat_set&gt;</code></span></div>
  <div><span class="added"><code>#define __cpp_lib_constexpr_forward_list 2025??L // also in &lt;forward_list&gt;</code></span></div>
  <div><span class="added"><code>#define __cpp_lib_constexpr_list 2025??L // also in &lt;list&gt;</code></span></div>
  <div><span class="added"><code>#define __cpp_lib_constexpr_map 2025??L // also in &lt;map&gt;</code></span></div>
  <div><span class="added"><code>#define __cpp_lib_constexpr_queue 2025??L // also in &lt;queue&gt;</code></span></div>
  <div><span class="added"><code>#define __cpp_lib_constexpr_set 2025??L // also in &lt;set&gt;</code></span></div>
  <div><span class="added"><code>#define __cpp_lib_constexpr_stack 2025??L // also in &lt;stack&gt;</code></span></div>
  <div><span class="added"><code>#define __cpp_lib_constexpr_unordered_map 2025??L // also in &lt;unordered_map&gt;</code></span></div>
  <div><span class="added"><code>#define __cpp_lib_constexpr_unordered_set 2025??L // also in &lt;unordered_set&gt;</code></span></div>
	</div>
</div></div></article>
</div><script>
	hljs.addPlugin(mergeHTMLPlugin);
	hljs.highlightAll();
</script>
</body>
</html>
