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