@@ -304,7 +304,7 @@ DimensionAxis interpolate(const DimensionAxis &op0,
304
304
const Val *latest1{};
305
305
const Val *latest2{};
306
306
307
- auto && merger = [&](const Val &lhs, const Val &rhs) -> Val
307
+ auto merger = [&](const Val &lhs, const Val &rhs) -> Val
308
308
{
309
309
latest1 = std::addressof (lhs);
310
310
latest2 = std::addressof (rhs);
@@ -332,7 +332,18 @@ DimensionAxis interpolate(const DimensionAxis &op0,
332
332
Alg::merge (op0.values ,
333
333
op1.values ,
334
334
res.values ,
335
- Alg::merge_args{.projection = &Val::first,
335
+ Alg::merge_args
336
+ // { Remove when clang-16 not used
337
+ <std::identity,
338
+ std::identity,
339
+ const Data::SliceIndex Val::*,
340
+ decltype (std::weak_order),
341
+ decltype (one_side ({}, {}, latest1)),
342
+ decltype (one_side ({}, {}, latest1)),
343
+ Alg::Merge::always,
344
+ decltype (merger)>
345
+ // }
346
+ {.projection = &Val::first,
336
347
.transformer_1 =
337
348
one_side (true , &DimensionAxis::Item::endPos, latest2),
338
349
.transformer_2 = one_side (false ,
@@ -381,8 +392,9 @@ interpolate(const SplitAxis &op0, const SplitAxis &op1, double factor)
381
392
};
382
393
};
383
394
384
- auto &&one_side = [needMerge](const decltype (merger (0.0 )) &merger,
385
- bool needOther)
395
+ using MergerType = decltype (merger (0.0 ));
396
+ auto &&one_side =
397
+ [needMerge](const MergerType &merger, bool needOther)
386
398
{
387
399
return
388
400
[needMerge, &merger, needOther, firstSpecial = needOther](
@@ -391,7 +403,8 @@ interpolate(const SplitAxis &op0, const SplitAxis &op1, double factor)
391
403
if (needMerge) {
392
404
if (firstSpecial) {
393
405
firstSpecial = false ;
394
- return merger (val, {});
406
+ return merger (val,
407
+ PartPair{std::nullopt, SplitAxis::Part{}});
395
408
}
396
409
397
410
Math::Range<> range{0.0 , 1.0 };
@@ -412,7 +425,18 @@ interpolate(const SplitAxis &op0, const SplitAxis &op1, double factor)
412
425
Alg::merge (op0.parts ,
413
426
op1.parts ,
414
427
res.parts ,
415
- Alg::merge_args{.projection = &PartPair::first,
428
+ Alg::merge_args
429
+ // { Remove when clang-16 not used
430
+ <std::identity,
431
+ std::identity,
432
+ const std::optional<Data::SliceIndex> PartPair::*,
433
+ decltype (std::weak_order),
434
+ decltype (one_side (merger ({}), {})),
435
+ decltype (one_side (merger ({}), {})),
436
+ Alg::Merge::always,
437
+ const MergerType &>
438
+ // }
439
+ {.projection = &PartPair::first,
416
440
.transformer_1 =
417
441
one_side (merger (factor), op1.parts .size () <= 1 ),
418
442
.transformer_2 =
0 commit comments