23 General utilities library [utilities]

23.10 Memory [memory]

23.10.7 uses_­allocator [allocator.uses]

23.10.7.2 Uses-allocator construction [allocator.uses.construction]

Uses-allocator construction с распределителем Alloc относится к построению объекта obj типа Tс использованием аргументов v1, v2, ..., vN конструктора типов V1, V2, ..., VNсоответственно и распределителя alloc типа в Allocсоответствии со следующими правилами:

  • если uses_­allocator_­v<T, Alloc> есть false и is_­constructible_­v<T, V1, V2, ..., VN> есть true, то obj инициализируется как obj(v1, v2, ..., vN);

  • в противном случае, если uses_­allocator_­v<T, Alloc> есть true и is_­constructible_­v<T, allocator_­arg_­t, Alloc, V1, V2, ..., VN> есть true, то obj инициализируется как obj(allocator_­arg, alloc, v1, v2, ..., vN);

  • в противном случае, если uses_­allocator_­v<T, Alloc> есть true и is_­constructible_­v<T, V1, V2, ..., VN, Alloc> есть true, то obj инициализируется как obj(v1, v2, ..., vN, alloc);

  • в противном случае запрос на построение распределителя использования будет некорректным. [ Note: Произойдет ошибка, если uses_­allocator_­v<T, Alloc> есть, true но конкретный конструктор не использует распределитель. Это определение предотвращает тихую ошибку передачи распределителя элементу. ] end note