@@ -304,7 +304,7 @@ DimensionAxis interpolate(const DimensionAxis &op0,
304304 const Val *latest1{};
305305 const Val *latest2{};
306306
307- auto && merger = [&](const Val &lhs, const Val &rhs) -> Val
307+ auto merger = [&](const Val &lhs, const Val &rhs) -> Val
308308 {
309309 latest1 = std::addressof (lhs);
310310 latest2 = std::addressof (rhs);
@@ -332,7 +332,18 @@ DimensionAxis interpolate(const DimensionAxis &op0,
332332 Alg::merge (op0.values ,
333333 op1.values ,
334334 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,
336347 .transformer_1 =
337348 one_side (true , &DimensionAxis::Item::endPos, latest2),
338349 .transformer_2 = one_side (false ,
@@ -381,8 +392,9 @@ interpolate(const SplitAxis &op0, const SplitAxis &op1, double factor)
381392 };
382393 };
383394
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)
386398 {
387399 return
388400 [needMerge, &merger, needOther, firstSpecial = needOther](
@@ -391,7 +403,8 @@ interpolate(const SplitAxis &op0, const SplitAxis &op1, double factor)
391403 if (needMerge) {
392404 if (firstSpecial) {
393405 firstSpecial = false ;
394- return merger (val, {});
406+ return merger (val,
407+ PartPair{std::nullopt , SplitAxis::Part{}});
395408 }
396409
397410 Math::Range<> range{0.0 , 1.0 };
@@ -412,7 +425,18 @@ interpolate(const SplitAxis &op0, const SplitAxis &op1, double factor)
412425 Alg::merge (op0.parts ,
413426 op1.parts ,
414427 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,
416440 .transformer_1 =
417441 one_side (merger (factor), op1.parts .size () <= 1 ),
418442 .transformer_2 =
0 commit comments