The Swift Package Index logo.Swift Package Index

Build Information

Failed to build manifold-swift, reference 1.1.3 (3f92d5), with Swift 6.1 for Android on 13 Oct 2026 08:10:35 UTC.

Build Command

bash -c docker run --pull=always --rm -v "checkouts-53886768-2":/host -w "$PWD" -e JAVA_HOME="/root/.sdkman/candidates/java/current" -e SPI_BUILD="1" -e SPI_PROCESSING="1" registry.gitlab.com/saguaro1/spi-images:android-6.1-latest swift build --swift-sdk aarch64-unknown-linux-android24 2>&1

Build Log

 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:464:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
462 |    */
463 |   constexpr double Scale() const {
464 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
465 |     return la::max(absMax.x, absMax.y);
466 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:778:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
 776 | };
 777 | template <class T>
 778 | struct vec<T, 2> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'vec<double, 2> &&' for 1st argument
 779 |   T x, y;
 780 |   constexpr vec() : x(), y() {}
 781 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 782 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 783 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 784 |   template <class U, int N>
 785 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 786 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 787 |     static_assert(
     :
 793 |
 794 |   template <class U, class = detail::conv_t<vec, U>>
 795 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 2>, vec<int, 2>>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 796 |   template <class U, class = detail::conv_t<U, vec>>
 797 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 2>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 798 |     return converter<U, vec>{}(*this);
 799 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:17: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | internal import ManifoldCPP
   |                 `- error: could not build C module 'ManifoldCPP'
 3 | internal import ManifoldBridge
 4 |
Running build ...
bash -c docker run --pull=always --rm -v "checkouts-53886768-2":/host -w "$PWD" -e JAVA_HOME="/root/.sdkman/candidates/java/current" -e SPI_BUILD="1" -e SPI_PROCESSING="1" registry.gitlab.com/saguaro1/spi-images:android-6.1-latest swift build --swift-sdk aarch64-unknown-linux-android24 2>&1
android-6.1-latest: Pulling from saguaro1/spi-images
Digest: sha256:396310cef4466ceb116ed5462b0b92d4deb353c0dad749b406b7fd226f6db9af
Status: Image is up to date for registry.gitlab.com/saguaro1/spi-images:android-6.1-latest
[0/1] Planning build
Building for debugging...
[0/1] Write swift-version-24593BA9C3E375BF.txt
[2/23] Compiling Manifold3D Manifold+Composition.swift
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 25 |
 26 | #include "./math.h"
 27 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 28 |
 29 | namespace manifold {
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:294:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
292 |    */
293 |   constexpr double Scale() const {
294 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
295 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
296 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:802:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
 800 | };
 801 | template <class T>
 802 | struct vec<T, 3> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'vec<double, 3> &&' for 1st argument
 803 |   T x, y, z;
 804 |   constexpr vec() : x(), y(), z() {}
 805 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 806 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 807 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 808 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 809 |   template <class U, int N>
 810 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 811 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 812 |     static_assert(
     :
 824 |
 825 |   template <class U, class = detail::conv_t<vec, U>>
 826 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 3>, vec<int, 3>>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 827 |   template <class U, class = detail::conv_t<U, vec>>
 828 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 3>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 829 |     return converter<U, vec>{}(*this);
 830 |   }
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:464:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
462 |    */
463 |   constexpr double Scale() const {
464 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
465 |     return la::max(absMax.x, absMax.y);
466 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:778:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
 776 | };
 777 | template <class T>
 778 | struct vec<T, 2> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'vec<double, 2> &&' for 1st argument
 779 |   T x, y;
 780 |   constexpr vec() : x(), y() {}
 781 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 782 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 783 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 784 |   template <class U, int N>
 785 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 786 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 787 |     static_assert(
     :
 793 |
 794 |   template <class U, class = detail::conv_t<vec, U>>
 795 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 2>, vec<int, 2>>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 796 |   template <class U, class = detail::conv_t<U, vec>>
 797 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 2>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 798 |     return converter<U, vec>{}(*this);
 799 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:17: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | internal import ManifoldCPP
   |                 `- error: could not build C module 'ManifoldCPP'
 3 | internal import ManifoldBridge
 4 |
[3/23] Compiling Manifold3D Manifold+Operations.swift
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 25 |
 26 | #include "./math.h"
 27 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 28 |
 29 | namespace manifold {
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:294:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
292 |    */
293 |   constexpr double Scale() const {
294 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
295 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
296 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:802:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
 800 | };
 801 | template <class T>
 802 | struct vec<T, 3> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'vec<double, 3> &&' for 1st argument
 803 |   T x, y, z;
 804 |   constexpr vec() : x(), y(), z() {}
 805 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 806 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 807 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 808 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 809 |   template <class U, int N>
 810 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 811 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 812 |     static_assert(
     :
 824 |
 825 |   template <class U, class = detail::conv_t<vec, U>>
 826 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 3>, vec<int, 3>>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 827 |   template <class U, class = detail::conv_t<U, vec>>
 828 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 3>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 829 |     return converter<U, vec>{}(*this);
 830 |   }
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:464:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
462 |    */
463 |   constexpr double Scale() const {
464 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
465 |     return la::max(absMax.x, absMax.y);
466 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:778:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
 776 | };
 777 | template <class T>
 778 | struct vec<T, 2> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'vec<double, 2> &&' for 1st argument
 779 |   T x, y;
 780 |   constexpr vec() : x(), y() {}
 781 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 782 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 783 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 784 |   template <class U, int N>
 785 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 786 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 787 |     static_assert(
     :
 793 |
 794 |   template <class U, class = detail::conv_t<vec, U>>
 795 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 2>, vec<int, 2>>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 796 |   template <class U, class = detail::conv_t<U, vec>>
 797 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 2>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 798 |     return converter<U, vec>{}(*this);
 799 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:17: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | internal import ManifoldCPP
   |                 `- error: could not build C module 'ManifoldCPP'
 3 | internal import ManifoldBridge
 4 |
[4/23] Compiling Manifold3D Manifold+Properties.swift
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 25 |
 26 | #include "./math.h"
 27 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 28 |
 29 | namespace manifold {
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:294:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
292 |    */
293 |   constexpr double Scale() const {
294 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
295 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
296 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:802:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
 800 | };
 801 | template <class T>
 802 | struct vec<T, 3> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'vec<double, 3> &&' for 1st argument
 803 |   T x, y, z;
 804 |   constexpr vec() : x(), y(), z() {}
 805 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 806 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 807 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 808 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 809 |   template <class U, int N>
 810 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 811 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 812 |     static_assert(
     :
 824 |
 825 |   template <class U, class = detail::conv_t<vec, U>>
 826 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 3>, vec<int, 3>>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 827 |   template <class U, class = detail::conv_t<U, vec>>
 828 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 3>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 829 |     return converter<U, vec>{}(*this);
 830 |   }
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:464:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
462 |    */
463 |   constexpr double Scale() const {
464 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
465 |     return la::max(absMax.x, absMax.y);
466 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:778:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
 776 | };
 777 | template <class T>
 778 | struct vec<T, 2> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'vec<double, 2> &&' for 1st argument
 779 |   T x, y;
 780 |   constexpr vec() : x(), y() {}
 781 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 782 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 783 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 784 |   template <class U, int N>
 785 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 786 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 787 |     static_assert(
     :
 793 |
 794 |   template <class U, class = detail::conv_t<vec, U>>
 795 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 2>, vec<int, 2>>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 796 |   template <class U, class = detail::conv_t<U, vec>>
 797 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 2>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 798 |     return converter<U, vec>{}(*this);
 799 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:17: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | internal import ManifoldCPP
   |                 `- error: could not build C module 'ManifoldCPP'
 3 | internal import ManifoldBridge
 4 |
[5/26] Compiling Manifold3D RayHit.swift
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 25 |
 26 | #include "./math.h"
 27 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 28 |
 29 | namespace manifold {
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:294:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
292 |    */
293 |   constexpr double Scale() const {
294 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
295 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
296 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:802:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
 800 | };
 801 | template <class T>
 802 | struct vec<T, 3> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'vec<double, 3> &&' for 1st argument
 803 |   T x, y, z;
 804 |   constexpr vec() : x(), y(), z() {}
 805 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 806 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 807 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 808 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 809 |   template <class U, int N>
 810 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 811 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 812 |     static_assert(
     :
 824 |
 825 |   template <class U, class = detail::conv_t<vec, U>>
 826 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 3>, vec<int, 3>>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 827 |   template <class U, class = detail::conv_t<U, vec>>
 828 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 3>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 829 |     return converter<U, vec>{}(*this);
 830 |   }
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:464:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
462 |    */
463 |   constexpr double Scale() const {
464 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
465 |     return la::max(absMax.x, absMax.y);
466 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:778:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
 776 | };
 777 | template <class T>
 778 | struct vec<T, 2> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'vec<double, 2> &&' for 1st argument
 779 |   T x, y;
 780 |   constexpr vec() : x(), y() {}
 781 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 782 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 783 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 784 |   template <class U, int N>
 785 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 786 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 787 |     static_assert(
     :
 793 |
 794 |   template <class U, class = detail::conv_t<vec, U>>
 795 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 2>, vec<int, 2>>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 796 |   template <class U, class = detail::conv_t<U, vec>>
 797 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 2>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 798 |     return converter<U, vec>{}(*this);
 799 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:17: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | internal import ManifoldCPP
   |                 `- error: could not build C module 'ManifoldCPP'
 3 | internal import ManifoldBridge
 4 |
[6/26] Compiling Manifold3D Triangle.swift
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 25 |
 26 | #include "./math.h"
 27 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 28 |
 29 | namespace manifold {
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:294:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
292 |    */
293 |   constexpr double Scale() const {
294 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
295 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
296 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:802:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
 800 | };
 801 | template <class T>
 802 | struct vec<T, 3> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'vec<double, 3> &&' for 1st argument
 803 |   T x, y, z;
 804 |   constexpr vec() : x(), y(), z() {}
 805 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 806 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 807 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 808 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 809 |   template <class U, int N>
 810 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 811 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 812 |     static_assert(
     :
 824 |
 825 |   template <class U, class = detail::conv_t<vec, U>>
 826 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 3>, vec<int, 3>>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 827 |   template <class U, class = detail::conv_t<U, vec>>
 828 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 3>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 829 |     return converter<U, vec>{}(*this);
 830 |   }
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:464:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
462 |    */
463 |   constexpr double Scale() const {
464 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
465 |     return la::max(absMax.x, absMax.y);
466 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:778:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
 776 | };
 777 | template <class T>
 778 | struct vec<T, 2> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'vec<double, 2> &&' for 1st argument
 779 |   T x, y;
 780 |   constexpr vec() : x(), y() {}
 781 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 782 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 783 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 784 |   template <class U, int N>
 785 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 786 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 787 |     static_assert(
     :
 793 |
 794 |   template <class U, class = detail::conv_t<vec, U>>
 795 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 2>, vec<int, 2>>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 796 |   template <class U, class = detail::conv_t<U, vec>>
 797 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 2>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 798 |     return converter<U, vec>{}(*this);
 799 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:17: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | internal import ManifoldCPP
   |                 `- error: could not build C module 'ManifoldCPP'
 3 | internal import ManifoldBridge
 4 |
[7/26] Compiling Manifold3D Vectors.swift
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 25 |
 26 | #include "./math.h"
 27 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 28 |
 29 | namespace manifold {
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:294:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
292 |    */
293 |   constexpr double Scale() const {
294 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
295 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
296 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:802:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
 800 | };
 801 | template <class T>
 802 | struct vec<T, 3> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'vec<double, 3> &&' for 1st argument
 803 |   T x, y, z;
 804 |   constexpr vec() : x(), y(), z() {}
 805 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 806 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 807 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 808 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 809 |   template <class U, int N>
 810 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 811 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 812 |     static_assert(
     :
 824 |
 825 |   template <class U, class = detail::conv_t<vec, U>>
 826 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 3>, vec<int, 3>>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 827 |   template <class U, class = detail::conv_t<U, vec>>
 828 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 3>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 829 |     return converter<U, vec>{}(*this);
 830 |   }
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:464:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
462 |    */
463 |   constexpr double Scale() const {
464 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
465 |     return la::max(absMax.x, absMax.y);
466 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:778:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
 776 | };
 777 | template <class T>
 778 | struct vec<T, 2> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'vec<double, 2> &&' for 1st argument
 779 |   T x, y;
 780 |   constexpr vec() : x(), y() {}
 781 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 782 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 783 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 784 |   template <class U, int N>
 785 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 786 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 787 |     static_assert(
     :
 793 |
 794 |   template <class U, class = detail::conv_t<vec, U>>
 795 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 2>, vec<int, 2>>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 796 |   template <class U, class = detail::conv_t<U, vec>>
 797 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 2>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 798 |     return converter<U, vec>{}(*this);
 799 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:17: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | internal import ManifoldCPP
   |                 `- error: could not build C module 'ManifoldCPP'
 3 | internal import ManifoldBridge
 4 |
[8/26] Compiling Manifold3D CrossSection+Operations.swift
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 25 |
 26 | #include "./math.h"
 27 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 28 |
 29 | namespace manifold {
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:618:52: warning: using integer absolute value function 'abs' when argument is of floating point type
 284 | template <class F, int M, class A>
 285 | struct apply<F, scalars_t<>, vec<A, M>> {
 286 |   using type = vec<ret_t<F, A>, M>;
     |                    `- note: in instantiation of template type alias 'ret_t' requested here
 287 |   enum { size = M, mm = 0 };
 288 |   template <int... I>
     :
 616 | struct std_abs {
 617 |   template <class A>
 618 |   constexpr auto operator()(A a) const -> decltype(std::abs(a)) {
     |                                                    |- warning: using integer absolute value function 'abs' when argument is of floating point type
     |                                                    |- note: use function 'std::abs' instead
     |                                                    `- note: include the header <cmath> or explicitly provide a declaration for 'std::abs'
 619 |     return std::abs(a);
 620 |   }
     :
1168 | // be used with return type SFINAE to constrain overload sets
1169 | template <class F, class... A>
1170 | using apply_t = typename detail::apply<F, void, A...>::type;
     | `- note: in instantiation of template class 'linalg::detail::apply<linalg::detail::std_abs, void, linalg::vec<double, 3>>' requested here
1171 | template <class F, class... A>
1172 | using mm_apply_t = typename std::enable_if<detail::apply<F, void, A...>::mm,
     :
1454 | }
1455 | template <class A>
1456 | constexpr apply_t<detail::std_abs, A> abs(const A& a) {
     |           `- note: in instantiation of template type alias 'apply_t' requested here
1457 |   return apply(detail::std_abs{}, a);
1458 | }
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:294:27: note: while substituting deduced template arguments into function template 'abs' [with A = vec3]
 25 |
 26 | #include "./math.h"
 27 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 28 |
 29 | namespace manifold {
    :
292 |    */
293 |   constexpr double Scale() const {
294 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |                           `- note: while substituting deduced template arguments into function template 'abs' [with A = vec3]
295 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
296 |   }
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:619:12: warning: using integer absolute value function 'abs' when argument is of floating point type
 288 |   template <int... I>
 289 |   static constexpr type impl(seq<I...>, F f, const vec<A, M>& a) {
 290 |     return {f(getter<I>{}(a))...};
     |             `- note: in instantiation of function template specialization 'linalg::detail::std_abs::operator()<double>' requested here
 291 |   }
 292 | };
     :
 617 |   template <class A>
 618 |   constexpr auto operator()(A a) const -> decltype(std::abs(a)) {
 619 |     return std::abs(a);
     |            |- warning: using integer absolute value function 'abs' when argument is of floating point type
     |            |- note: use function 'std::abs' instead
     |            `- note: include the header <cmath> or explicitly provide a declaration for 'std::abs'
 620 |   }
 621 | };
     :
1184 | template <class F, class... A>
1185 | constexpr apply_t<F, A...> apply(F func, const A&... args) {
1186 |   return detail::apply<F, void, A...>::impl(
     |                                        `- note: in instantiation of function template specialization 'linalg::detail::apply<linalg::detail::std_abs, void, linalg::vec<double, 3>>::impl<0, 1, 2>' requested here
1187 |       detail::make_seq<0, detail::apply<F, void, A...>::size>{}, func, args...);
1188 | }
     :
1455 | template <class A>
1456 | constexpr apply_t<detail::std_abs, A> abs(const A& a) {
1457 |   return apply(detail::std_abs{}, a);
     |          `- note: in instantiation of function template specialization 'linalg::apply<linalg::detail::std_abs, linalg::vec<double, 3>>' requested here
1458 | }
1459 | template <class A>
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:294:31: note: in instantiation of function template specialization 'linalg::abs<linalg::vec<double, 3>>' requested here
292 |    */
293 |   constexpr double Scale() const {
294 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |                               `- note: in instantiation of function template specialization 'linalg::abs<linalg::vec<double, 3>>' requested here
295 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
296 |   }
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:294:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
292 |    */
293 |   constexpr double Scale() const {
294 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
295 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
296 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:802:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
 800 | };
 801 | template <class T>
 802 | struct vec<T, 3> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'vec<double, 3> &&' for 1st argument
 803 |   T x, y, z;
 804 |   constexpr vec() : x(), y(), z() {}
 805 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 806 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 807 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 808 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 809 |   template <class U, int N>
 810 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 811 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 812 |     static_assert(
     :
 824 |
 825 |   template <class U, class = detail::conv_t<vec, U>>
 826 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 3>, vec<int, 3>>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 827 |   template <class U, class = detail::conv_t<U, vec>>
 828 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 3>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 829 |     return converter<U, vec>{}(*this);
 830 |   }
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:464:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
462 |    */
463 |   constexpr double Scale() const {
464 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
465 |     return la::max(absMax.x, absMax.y);
466 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:778:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
 776 | };
 777 | template <class T>
 778 | struct vec<T, 2> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'vec<double, 2> &&' for 1st argument
 779 |   T x, y;
 780 |   constexpr vec() : x(), y() {}
 781 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 782 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 783 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 784 |   template <class U, int N>
 785 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 786 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 787 |     static_assert(
     :
 793 |
 794 |   template <class U, class = detail::conv_t<vec, U>>
 795 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 2>, vec<int, 2>>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 796 |   template <class U, class = detail::conv_t<U, vec>>
 797 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 2>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 798 |     return converter<U, vec>{}(*this);
 799 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:17: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | internal import ManifoldCPP
   |                 `- error: could not build C module 'ManifoldCPP'
 3 | internal import ManifoldBridge
 4 |
[9/26] Compiling Manifold3D CrossSection+Properties.swift
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 25 |
 26 | #include "./math.h"
 27 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 28 |
 29 | namespace manifold {
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:618:52: warning: using integer absolute value function 'abs' when argument is of floating point type
 284 | template <class F, int M, class A>
 285 | struct apply<F, scalars_t<>, vec<A, M>> {
 286 |   using type = vec<ret_t<F, A>, M>;
     |                    `- note: in instantiation of template type alias 'ret_t' requested here
 287 |   enum { size = M, mm = 0 };
 288 |   template <int... I>
     :
 616 | struct std_abs {
 617 |   template <class A>
 618 |   constexpr auto operator()(A a) const -> decltype(std::abs(a)) {
     |                                                    |- warning: using integer absolute value function 'abs' when argument is of floating point type
     |                                                    |- note: use function 'std::abs' instead
     |                                                    `- note: include the header <cmath> or explicitly provide a declaration for 'std::abs'
 619 |     return std::abs(a);
 620 |   }
     :
1168 | // be used with return type SFINAE to constrain overload sets
1169 | template <class F, class... A>
1170 | using apply_t = typename detail::apply<F, void, A...>::type;
     | `- note: in instantiation of template class 'linalg::detail::apply<linalg::detail::std_abs, void, linalg::vec<double, 3>>' requested here
1171 | template <class F, class... A>
1172 | using mm_apply_t = typename std::enable_if<detail::apply<F, void, A...>::mm,
     :
1454 | }
1455 | template <class A>
1456 | constexpr apply_t<detail::std_abs, A> abs(const A& a) {
     |           `- note: in instantiation of template type alias 'apply_t' requested here
1457 |   return apply(detail::std_abs{}, a);
1458 | }
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:294:27: note: while substituting deduced template arguments into function template 'abs' [with A = vec3]
 25 |
 26 | #include "./math.h"
 27 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 28 |
 29 | namespace manifold {
    :
292 |    */
293 |   constexpr double Scale() const {
294 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |                           `- note: while substituting deduced template arguments into function template 'abs' [with A = vec3]
295 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
296 |   }
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:619:12: warning: using integer absolute value function 'abs' when argument is of floating point type
 288 |   template <int... I>
 289 |   static constexpr type impl(seq<I...>, F f, const vec<A, M>& a) {
 290 |     return {f(getter<I>{}(a))...};
     |             `- note: in instantiation of function template specialization 'linalg::detail::std_abs::operator()<double>' requested here
 291 |   }
 292 | };
     :
 617 |   template <class A>
 618 |   constexpr auto operator()(A a) const -> decltype(std::abs(a)) {
 619 |     return std::abs(a);
     |            |- warning: using integer absolute value function 'abs' when argument is of floating point type
     |            |- note: use function 'std::abs' instead
     |            `- note: include the header <cmath> or explicitly provide a declaration for 'std::abs'
 620 |   }
 621 | };
     :
1184 | template <class F, class... A>
1185 | constexpr apply_t<F, A...> apply(F func, const A&... args) {
1186 |   return detail::apply<F, void, A...>::impl(
     |                                        `- note: in instantiation of function template specialization 'linalg::detail::apply<linalg::detail::std_abs, void, linalg::vec<double, 3>>::impl<0, 1, 2>' requested here
1187 |       detail::make_seq<0, detail::apply<F, void, A...>::size>{}, func, args...);
1188 | }
     :
1455 | template <class A>
1456 | constexpr apply_t<detail::std_abs, A> abs(const A& a) {
1457 |   return apply(detail::std_abs{}, a);
     |          `- note: in instantiation of function template specialization 'linalg::apply<linalg::detail::std_abs, linalg::vec<double, 3>>' requested here
1458 | }
1459 | template <class A>
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:294:31: note: in instantiation of function template specialization 'linalg::abs<linalg::vec<double, 3>>' requested here
292 |    */
293 |   constexpr double Scale() const {
294 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |                               `- note: in instantiation of function template specialization 'linalg::abs<linalg::vec<double, 3>>' requested here
295 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
296 |   }
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:294:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
292 |    */
293 |   constexpr double Scale() const {
294 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
295 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
296 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:802:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
 800 | };
 801 | template <class T>
 802 | struct vec<T, 3> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'vec<double, 3> &&' for 1st argument
 803 |   T x, y, z;
 804 |   constexpr vec() : x(), y(), z() {}
 805 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 806 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 807 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 808 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 809 |   template <class U, int N>
 810 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 811 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 812 |     static_assert(
     :
 824 |
 825 |   template <class U, class = detail::conv_t<vec, U>>
 826 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 3>, vec<int, 3>>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 827 |   template <class U, class = detail::conv_t<U, vec>>
 828 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 3>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 829 |     return converter<U, vec>{}(*this);
 830 |   }
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:464:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
462 |    */
463 |   constexpr double Scale() const {
464 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
465 |     return la::max(absMax.x, absMax.y);
466 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:778:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
 776 | };
 777 | template <class T>
 778 | struct vec<T, 2> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'vec<double, 2> &&' for 1st argument
 779 |   T x, y;
 780 |   constexpr vec() : x(), y() {}
 781 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 782 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 783 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 784 |   template <class U, int N>
 785 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 786 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 787 |     static_assert(
     :
 793 |
 794 |   template <class U, class = detail::conv_t<vec, U>>
 795 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 2>, vec<int, 2>>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 796 |   template <class U, class = detail::conv_t<U, vec>>
 797 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 2>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 798 |     return converter<U, vec>{}(*this);
 799 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:17: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | internal import ManifoldCPP
   |                 `- error: could not build C module 'ManifoldCPP'
 3 | internal import ManifoldBridge
 4 |
[10/26] Compiling Manifold3D CrossSection+Shapes.swift
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 25 |
 26 | #include "./math.h"
 27 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 28 |
 29 | namespace manifold {
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:618:52: warning: using integer absolute value function 'abs' when argument is of floating point type
 284 | template <class F, int M, class A>
 285 | struct apply<F, scalars_t<>, vec<A, M>> {
 286 |   using type = vec<ret_t<F, A>, M>;
     |                    `- note: in instantiation of template type alias 'ret_t' requested here
 287 |   enum { size = M, mm = 0 };
 288 |   template <int... I>
     :
 616 | struct std_abs {
 617 |   template <class A>
 618 |   constexpr auto operator()(A a) const -> decltype(std::abs(a)) {
     |                                                    |- warning: using integer absolute value function 'abs' when argument is of floating point type
     |                                                    |- note: use function 'std::abs' instead
     |                                                    `- note: include the header <cmath> or explicitly provide a declaration for 'std::abs'
 619 |     return std::abs(a);
 620 |   }
     :
1168 | // be used with return type SFINAE to constrain overload sets
1169 | template <class F, class... A>
1170 | using apply_t = typename detail::apply<F, void, A...>::type;
     | `- note: in instantiation of template class 'linalg::detail::apply<linalg::detail::std_abs, void, linalg::vec<double, 3>>' requested here
1171 | template <class F, class... A>
1172 | using mm_apply_t = typename std::enable_if<detail::apply<F, void, A...>::mm,
     :
1454 | }
1455 | template <class A>
1456 | constexpr apply_t<detail::std_abs, A> abs(const A& a) {
     |           `- note: in instantiation of template type alias 'apply_t' requested here
1457 |   return apply(detail::std_abs{}, a);
1458 | }
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:294:27: note: while substituting deduced template arguments into function template 'abs' [with A = vec3]
 25 |
 26 | #include "./math.h"
 27 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 28 |
 29 | namespace manifold {
    :
292 |    */
293 |   constexpr double Scale() const {
294 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |                           `- note: while substituting deduced template arguments into function template 'abs' [with A = vec3]
295 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
296 |   }
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:619:12: warning: using integer absolute value function 'abs' when argument is of floating point type
 288 |   template <int... I>
 289 |   static constexpr type impl(seq<I...>, F f, const vec<A, M>& a) {
 290 |     return {f(getter<I>{}(a))...};
     |             `- note: in instantiation of function template specialization 'linalg::detail::std_abs::operator()<double>' requested here
 291 |   }
 292 | };
     :
 617 |   template <class A>
 618 |   constexpr auto operator()(A a) const -> decltype(std::abs(a)) {
 619 |     return std::abs(a);
     |            |- warning: using integer absolute value function 'abs' when argument is of floating point type
     |            |- note: use function 'std::abs' instead
     |            `- note: include the header <cmath> or explicitly provide a declaration for 'std::abs'
 620 |   }
 621 | };
     :
1184 | template <class F, class... A>
1185 | constexpr apply_t<F, A...> apply(F func, const A&... args) {
1186 |   return detail::apply<F, void, A...>::impl(
     |                                        `- note: in instantiation of function template specialization 'linalg::detail::apply<linalg::detail::std_abs, void, linalg::vec<double, 3>>::impl<0, 1, 2>' requested here
1187 |       detail::make_seq<0, detail::apply<F, void, A...>::size>{}, func, args...);
1188 | }
     :
1455 | template <class A>
1456 | constexpr apply_t<detail::std_abs, A> abs(const A& a) {
1457 |   return apply(detail::std_abs{}, a);
     |          `- note: in instantiation of function template specialization 'linalg::apply<linalg::detail::std_abs, linalg::vec<double, 3>>' requested here
1458 | }
1459 | template <class A>
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:294:31: note: in instantiation of function template specialization 'linalg::abs<linalg::vec<double, 3>>' requested here
292 |    */
293 |   constexpr double Scale() const {
294 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |                               `- note: in instantiation of function template specialization 'linalg::abs<linalg::vec<double, 3>>' requested here
295 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
296 |   }
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:294:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
292 |    */
293 |   constexpr double Scale() const {
294 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
295 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
296 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:802:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
 800 | };
 801 | template <class T>
 802 | struct vec<T, 3> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'vec<double, 3> &&' for 1st argument
 803 |   T x, y, z;
 804 |   constexpr vec() : x(), y(), z() {}
 805 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 806 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 807 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 808 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 809 |   template <class U, int N>
 810 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 811 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 812 |     static_assert(
     :
 824 |
 825 |   template <class U, class = detail::conv_t<vec, U>>
 826 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 3>, vec<int, 3>>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 827 |   template <class U, class = detail::conv_t<U, vec>>
 828 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 3>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 829 |     return converter<U, vec>{}(*this);
 830 |   }
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:464:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
462 |    */
463 |   constexpr double Scale() const {
464 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
465 |     return la::max(absMax.x, absMax.y);
466 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:778:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
 776 | };
 777 | template <class T>
 778 | struct vec<T, 2> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'vec<double, 2> &&' for 1st argument
 779 |   T x, y;
 780 |   constexpr vec() : x(), y() {}
 781 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 782 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 783 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 784 |   template <class U, int N>
 785 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 786 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 787 |     static_assert(
     :
 793 |
 794 |   template <class U, class = detail::conv_t<vec, U>>
 795 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 2>, vec<int, 2>>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 796 |   template <class U, class = detail::conv_t<U, vec>>
 797 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 2>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 798 |     return converter<U, vec>{}(*this);
 799 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:17: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | internal import ManifoldCPP
   |                 `- error: could not build C module 'ManifoldCPP'
 3 | internal import ManifoldBridge
 4 |
error: emit-module command failed with exit code 1 (use -v to see invocation)
[11/26] Emitting module Manifold3D
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 25 |
 26 | #include "./math.h"
 27 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 28 |
 29 | namespace manifold {
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:618:52: warning: using integer absolute value function 'abs' when argument is of floating point type
 284 | template <class F, int M, class A>
 285 | struct apply<F, scalars_t<>, vec<A, M>> {
 286 |   using type = vec<ret_t<F, A>, M>;
     |                    `- note: in instantiation of template type alias 'ret_t' requested here
 287 |   enum { size = M, mm = 0 };
 288 |   template <int... I>
     :
 616 | struct std_abs {
 617 |   template <class A>
 618 |   constexpr auto operator()(A a) const -> decltype(std::abs(a)) {
     |                                                    |- warning: using integer absolute value function 'abs' when argument is of floating point type
     |                                                    |- note: use function 'std::abs' instead
     |                                                    `- note: include the header <cmath> or explicitly provide a declaration for 'std::abs'
 619 |     return std::abs(a);
 620 |   }
     :
1168 | // be used with return type SFINAE to constrain overload sets
1169 | template <class F, class... A>
1170 | using apply_t = typename detail::apply<F, void, A...>::type;
     | `- note: in instantiation of template class 'linalg::detail::apply<linalg::detail::std_abs, void, linalg::vec<double, 3>>' requested here
1171 | template <class F, class... A>
1172 | using mm_apply_t = typename std::enable_if<detail::apply<F, void, A...>::mm,
     :
1454 | }
1455 | template <class A>
1456 | constexpr apply_t<detail::std_abs, A> abs(const A& a) {
     |           `- note: in instantiation of template type alias 'apply_t' requested here
1457 |   return apply(detail::std_abs{}, a);
1458 | }
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:294:27: note: while substituting deduced template arguments into function template 'abs' [with A = vec3]
 25 |
 26 | #include "./math.h"
 27 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 28 |
 29 | namespace manifold {
    :
292 |    */
293 |   constexpr double Scale() const {
294 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |                           `- note: while substituting deduced template arguments into function template 'abs' [with A = vec3]
295 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
296 |   }
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:619:12: warning: using integer absolute value function 'abs' when argument is of floating point type
 288 |   template <int... I>
 289 |   static constexpr type impl(seq<I...>, F f, const vec<A, M>& a) {
 290 |     return {f(getter<I>{}(a))...};
     |             `- note: in instantiation of function template specialization 'linalg::detail::std_abs::operator()<double>' requested here
 291 |   }
 292 | };
     :
 617 |   template <class A>
 618 |   constexpr auto operator()(A a) const -> decltype(std::abs(a)) {
 619 |     return std::abs(a);
     |            |- warning: using integer absolute value function 'abs' when argument is of floating point type
     |            |- note: use function 'std::abs' instead
     |            `- note: include the header <cmath> or explicitly provide a declaration for 'std::abs'
 620 |   }
 621 | };
     :
1184 | template <class F, class... A>
1185 | constexpr apply_t<F, A...> apply(F func, const A&... args) {
1186 |   return detail::apply<F, void, A...>::impl(
     |                                        `- note: in instantiation of function template specialization 'linalg::detail::apply<linalg::detail::std_abs, void, linalg::vec<double, 3>>::impl<0, 1, 2>' requested here
1187 |       detail::make_seq<0, detail::apply<F, void, A...>::size>{}, func, args...);
1188 | }
     :
1455 | template <class A>
1456 | constexpr apply_t<detail::std_abs, A> abs(const A& a) {
1457 |   return apply(detail::std_abs{}, a);
     |          `- note: in instantiation of function template specialization 'linalg::apply<linalg::detail::std_abs, linalg::vec<double, 3>>' requested here
1458 | }
1459 | template <class A>
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:294:31: note: in instantiation of function template specialization 'linalg::abs<linalg::vec<double, 3>>' requested here
292 |    */
293 |   constexpr double Scale() const {
294 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |                               `- note: in instantiation of function template specialization 'linalg::abs<linalg::vec<double, 3>>' requested here
295 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
296 |   }
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:294:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
292 |    */
293 |   constexpr double Scale() const {
294 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
295 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
296 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:802:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
 800 | };
 801 | template <class T>
 802 | struct vec<T, 3> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'vec<double, 3> &&' for 1st argument
 803 |   T x, y, z;
 804 |   constexpr vec() : x(), y(), z() {}
 805 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 806 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 807 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 808 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 809 |   template <class U, int N>
 810 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 811 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 812 |     static_assert(
     :
 824 |
 825 |   template <class U, class = detail::conv_t<vec, U>>
 826 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 3>, vec<int, 3>>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 827 |   template <class U, class = detail::conv_t<U, vec>>
 828 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 3>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 829 |     return converter<U, vec>{}(*this);
 830 |   }
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:464:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
462 |    */
463 |   constexpr double Scale() const {
464 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
465 |     return la::max(absMax.x, absMax.y);
466 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:778:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
 776 | };
 777 | template <class T>
 778 | struct vec<T, 2> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'vec<double, 2> &&' for 1st argument
 779 |   T x, y;
 780 |   constexpr vec() : x(), y() {}
 781 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 782 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 783 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 784 |   template <class U, int N>
 785 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 786 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 787 |     static_assert(
     :
 793 |
 794 |   template <class U, class = detail::conv_t<vec, U>>
 795 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 2>, vec<int, 2>>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 796 |   template <class U, class = detail::conv_t<U, vec>>
 797 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 2>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 798 |     return converter<U, vec>{}(*this);
 799 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:17: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | internal import ManifoldCPP
   |                 `- error: could not build C module 'ManifoldCPP'
 3 | internal import ManifoldBridge
 4 |
[12/26] Compiling Manifold3D CrossSectionTypes.swift
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 25 |
 26 | #include "./math.h"
 27 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 28 |
 29 | namespace manifold {
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:294:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
292 |    */
293 |   constexpr double Scale() const {
294 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
295 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
296 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:802:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
 800 | };
 801 | template <class T>
 802 | struct vec<T, 3> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'vec<double, 3> &&' for 1st argument
 803 |   T x, y, z;
 804 |   constexpr vec() : x(), y(), z() {}
 805 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 806 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 807 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 808 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 809 |   template <class U, int N>
 810 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 811 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 812 |     static_assert(
     :
 824 |
 825 |   template <class U, class = detail::conv_t<vec, U>>
 826 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 3>, vec<int, 3>>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 827 |   template <class U, class = detail::conv_t<U, vec>>
 828 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 3>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 829 |     return converter<U, vec>{}(*this);
 830 |   }
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:464:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
462 |    */
463 |   constexpr double Scale() const {
464 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
465 |     return la::max(absMax.x, absMax.y);
466 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:778:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
 776 | };
 777 | template <class T>
 778 | struct vec<T, 2> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'vec<double, 2> &&' for 1st argument
 779 |   T x, y;
 780 |   constexpr vec() : x(), y() {}
 781 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 782 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 783 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 784 |   template <class U, int N>
 785 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 786 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 787 |     static_assert(
     :
 793 |
 794 |   template <class U, class = detail::conv_t<vec, U>>
 795 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 2>, vec<int, 2>>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 796 |   template <class U, class = detail::conv_t<U, vec>>
 797 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 2>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 798 |     return converter<U, vec>{}(*this);
 799 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:17: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | internal import ManifoldCPP
   |                 `- error: could not build C module 'ManifoldCPP'
 3 | internal import ManifoldBridge
 4 |
[13/26] Compiling Manifold3D Matrices.swift
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 25 |
 26 | #include "./math.h"
 27 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 28 |
 29 | namespace manifold {
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:294:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
292 |    */
293 |   constexpr double Scale() const {
294 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
295 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
296 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:802:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
 800 | };
 801 | template <class T>
 802 | struct vec<T, 3> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'vec<double, 3> &&' for 1st argument
 803 |   T x, y, z;
 804 |   constexpr vec() : x(), y(), z() {}
 805 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 806 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 807 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 808 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 809 |   template <class U, int N>
 810 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 811 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 812 |     static_assert(
     :
 824 |
 825 |   template <class U, class = detail::conv_t<vec, U>>
 826 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 3>, vec<int, 3>>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 827 |   template <class U, class = detail::conv_t<U, vec>>
 828 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 3>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 829 |     return converter<U, vec>{}(*this);
 830 |   }
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:464:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
462 |    */
463 |   constexpr double Scale() const {
464 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
465 |     return la::max(absMax.x, absMax.y);
466 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:778:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
 776 | };
 777 | template <class T>
 778 | struct vec<T, 2> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'vec<double, 2> &&' for 1st argument
 779 |   T x, y;
 780 |   constexpr vec() : x(), y() {}
 781 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 782 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 783 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 784 |   template <class U, int N>
 785 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 786 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 787 |     static_assert(
     :
 793 |
 794 |   template <class U, class = detail::conv_t<vec, U>>
 795 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 2>, vec<int, 2>>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 796 |   template <class U, class = detail::conv_t<U, vec>>
 797 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 2>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 798 |     return converter<U, vec>{}(*this);
 799 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:17: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | internal import ManifoldCPP
   |                 `- error: could not build C module 'ManifoldCPP'
 3 | internal import ManifoldBridge
 4 |
[14/26] Compiling Manifold3D Polygon.swift
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 25 |
 26 | #include "./math.h"
 27 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 28 |
 29 | namespace manifold {
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:294:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
292 |    */
293 |   constexpr double Scale() const {
294 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
295 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
296 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:802:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
 800 | };
 801 | template <class T>
 802 | struct vec<T, 3> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'vec<double, 3> &&' for 1st argument
 803 |   T x, y, z;
 804 |   constexpr vec() : x(), y(), z() {}
 805 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 806 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 807 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 808 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 809 |   template <class U, int N>
 810 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 811 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 812 |     static_assert(
     :
 824 |
 825 |   template <class U, class = detail::conv_t<vec, U>>
 826 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 3>, vec<int, 3>>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 827 |   template <class U, class = detail::conv_t<U, vec>>
 828 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 3>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 829 |     return converter<U, vec>{}(*this);
 830 |   }
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:464:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
462 |    */
463 |   constexpr double Scale() const {
464 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
465 |     return la::max(absMax.x, absMax.y);
466 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:778:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
 776 | };
 777 | template <class T>
 778 | struct vec<T, 2> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'vec<double, 2> &&' for 1st argument
 779 |   T x, y;
 780 |   constexpr vec() : x(), y() {}
 781 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 782 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 783 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 784 |   template <class U, int N>
 785 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 786 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 787 |     static_assert(
     :
 793 |
 794 |   template <class U, class = detail::conv_t<vec, U>>
 795 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 2>, vec<int, 2>>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 796 |   template <class U, class = detail::conv_t<U, vec>>
 797 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 2>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 798 |     return converter<U, vec>{}(*this);
 799 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:17: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | internal import ManifoldCPP
   |                 `- error: could not build C module 'ManifoldCPP'
 3 | internal import ManifoldBridge
 4 |
[15/26] Compiling Manifold3D Manifold+Transforms.swift
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 25 |
 26 | #include "./math.h"
 27 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 28 |
 29 | namespace manifold {
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:294:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
292 |    */
293 |   constexpr double Scale() const {
294 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
295 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
296 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:802:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
 800 | };
 801 | template <class T>
 802 | struct vec<T, 3> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'vec<double, 3> &&' for 1st argument
 803 |   T x, y, z;
 804 |   constexpr vec() : x(), y(), z() {}
 805 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 806 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 807 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 808 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 809 |   template <class U, int N>
 810 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 811 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 812 |     static_assert(
     :
 824 |
 825 |   template <class U, class = detail::conv_t<vec, U>>
 826 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 3>, vec<int, 3>>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 827 |   template <class U, class = detail::conv_t<U, vec>>
 828 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 3>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 829 |     return converter<U, vec>{}(*this);
 830 |   }
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:464:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
462 |    */
463 |   constexpr double Scale() const {
464 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
465 |     return la::max(absMax.x, absMax.y);
466 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:778:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
 776 | };
 777 | template <class T>
 778 | struct vec<T, 2> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'vec<double, 2> &&' for 1st argument
 779 |   T x, y;
 780 |   constexpr vec() : x(), y() {}
 781 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 782 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 783 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 784 |   template <class U, int N>
 785 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 786 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 787 |     static_assert(
     :
 793 |
 794 |   template <class U, class = detail::conv_t<vec, U>>
 795 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 2>, vec<int, 2>>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 796 |   template <class U, class = detail::conv_t<U, vec>>
 797 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 2>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 798 |     return converter<U, vec>{}(*this);
 799 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:17: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | internal import ManifoldCPP
   |                 `- error: could not build C module 'ManifoldCPP'
 3 | internal import ManifoldBridge
 4 |
[16/26] Compiling Manifold3D Manifold+VertexProperties.swift
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 25 |
 26 | #include "./math.h"
 27 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 28 |
 29 | namespace manifold {
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:294:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
292 |    */
293 |   constexpr double Scale() const {
294 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
295 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
296 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:802:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
 800 | };
 801 | template <class T>
 802 | struct vec<T, 3> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'vec<double, 3> &&' for 1st argument
 803 |   T x, y, z;
 804 |   constexpr vec() : x(), y(), z() {}
 805 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 806 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 807 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 808 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 809 |   template <class U, int N>
 810 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 811 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 812 |     static_assert(
     :
 824 |
 825 |   template <class U, class = detail::conv_t<vec, U>>
 826 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 3>, vec<int, 3>>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 827 |   template <class U, class = detail::conv_t<U, vec>>
 828 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 3>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 829 |     return converter<U, vec>{}(*this);
 830 |   }
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:464:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
462 |    */
463 |   constexpr double Scale() const {
464 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
465 |     return la::max(absMax.x, absMax.y);
466 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:778:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
 776 | };
 777 | template <class T>
 778 | struct vec<T, 2> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'vec<double, 2> &&' for 1st argument
 779 |   T x, y;
 780 |   constexpr vec() : x(), y() {}
 781 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 782 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 783 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 784 |   template <class U, int N>
 785 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 786 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 787 |     static_assert(
     :
 793 |
 794 |   template <class U, class = detail::conv_t<vec, U>>
 795 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 2>, vec<int, 2>>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 796 |   template <class U, class = detail::conv_t<U, vec>>
 797 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 2>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 798 |     return converter<U, vec>{}(*this);
 799 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:17: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | internal import ManifoldCPP
   |                 `- error: could not build C module 'ManifoldCPP'
 3 | internal import ManifoldBridge
 4 |
[17/26] Compiling Manifold3D Manifold.swift
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 25 |
 26 | #include "./math.h"
 27 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 28 |
 29 | namespace manifold {
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:294:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
292 |    */
293 |   constexpr double Scale() const {
294 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
295 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
296 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:802:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
 800 | };
 801 | template <class T>
 802 | struct vec<T, 3> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'vec<double, 3> &&' for 1st argument
 803 |   T x, y, z;
 804 |   constexpr vec() : x(), y(), z() {}
 805 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 806 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 807 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 808 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 809 |   template <class U, int N>
 810 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 811 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 812 |     static_assert(
     :
 824 |
 825 |   template <class U, class = detail::conv_t<vec, U>>
 826 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 3>, vec<int, 3>>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 827 |   template <class U, class = detail::conv_t<U, vec>>
 828 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 3>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 829 |     return converter<U, vec>{}(*this);
 830 |   }
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:464:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
462 |    */
463 |   constexpr double Scale() const {
464 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
465 |     return la::max(absMax.x, absMax.y);
466 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:778:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
 776 | };
 777 | template <class T>
 778 | struct vec<T, 2> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'vec<double, 2> &&' for 1st argument
 779 |   T x, y;
 780 |   constexpr vec() : x(), y() {}
 781 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 782 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 783 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 784 |   template <class U, int N>
 785 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 786 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 787 |     static_assert(
     :
 793 |
 794 |   template <class U, class = detail::conv_t<vec, U>>
 795 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 2>, vec<int, 2>>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 796 |   template <class U, class = detail::conv_t<U, vec>>
 797 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 2>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 798 |     return converter<U, vec>{}(*this);
 799 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:17: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | internal import ManifoldCPP
   |                 `- error: could not build C module 'ManifoldCPP'
 3 | internal import ManifoldBridge
 4 |
[18/26] Compiling Manifold3D CrossSection+Transforms.swift
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 25 |
 26 | #include "./math.h"
 27 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 28 |
 29 | namespace manifold {
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:294:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
292 |    */
293 |   constexpr double Scale() const {
294 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
295 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
296 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:802:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
 800 | };
 801 | template <class T>
 802 | struct vec<T, 3> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'vec<double, 3> &&' for 1st argument
 803 |   T x, y, z;
 804 |   constexpr vec() : x(), y(), z() {}
 805 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 806 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 807 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 808 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 809 |   template <class U, int N>
 810 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 811 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 812 |     static_assert(
     :
 824 |
 825 |   template <class U, class = detail::conv_t<vec, U>>
 826 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 3>, vec<int, 3>>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 827 |   template <class U, class = detail::conv_t<U, vec>>
 828 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 3>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 829 |     return converter<U, vec>{}(*this);
 830 |   }
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:464:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
462 |    */
463 |   constexpr double Scale() const {
464 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
465 |     return la::max(absMax.x, absMax.y);
466 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:778:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
 776 | };
 777 | template <class T>
 778 | struct vec<T, 2> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'vec<double, 2> &&' for 1st argument
 779 |   T x, y;
 780 |   constexpr vec() : x(), y() {}
 781 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 782 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 783 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 784 |   template <class U, int N>
 785 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 786 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 787 |     static_assert(
     :
 793 |
 794 |   template <class U, class = detail::conv_t<vec, U>>
 795 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 2>, vec<int, 2>>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 796 |   template <class U, class = detail::conv_t<U, vec>>
 797 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 2>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 798 |     return converter<U, vec>{}(*this);
 799 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:17: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | internal import ManifoldCPP
   |                 `- error: could not build C module 'ManifoldCPP'
 3 | internal import ManifoldBridge
 4 |
[19/26] Compiling Manifold3D CrossSection.swift
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 25 |
 26 | #include "./math.h"
 27 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 28 |
 29 | namespace manifold {
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:294:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
292 |    */
293 |   constexpr double Scale() const {
294 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
295 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
296 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:802:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
 800 | };
 801 | template <class T>
 802 | struct vec<T, 3> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'vec<double, 3> &&' for 1st argument
 803 |   T x, y, z;
 804 |   constexpr vec() : x(), y(), z() {}
 805 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 806 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 807 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 808 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 809 |   template <class U, int N>
 810 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 811 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 812 |     static_assert(
     :
 824 |
 825 |   template <class U, class = detail::conv_t<vec, U>>
 826 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 3>, vec<int, 3>>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 827 |   template <class U, class = detail::conv_t<U, vec>>
 828 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 3>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 829 |     return converter<U, vec>{}(*this);
 830 |   }
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:464:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
462 |    */
463 |   constexpr double Scale() const {
464 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
465 |     return la::max(absMax.x, absMax.y);
466 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:778:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
 776 | };
 777 | template <class T>
 778 | struct vec<T, 2> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'vec<double, 2> &&' for 1st argument
 779 |   T x, y;
 780 |   constexpr vec() : x(), y() {}
 781 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 782 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 783 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 784 |   template <class U, int N>
 785 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 786 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 787 |     static_assert(
     :
 793 |
 794 |   template <class U, class = detail::conv_t<vec, U>>
 795 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 2>, vec<int, 2>>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 796 |   template <class U, class = detail::conv_t<U, vec>>
 797 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 2>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 798 |     return converter<U, vec>{}(*this);
 799 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:17: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | internal import ManifoldCPP
   |                 `- error: could not build C module 'ManifoldCPP'
 3 | internal import ManifoldBridge
 4 |
[20/26] Compiling Manifold3D Geometry.swift
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 25 |
 26 | #include "./math.h"
 27 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 28 |
 29 | namespace manifold {
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:294:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
292 |    */
293 |   constexpr double Scale() const {
294 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
295 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
296 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:802:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
 800 | };
 801 | template <class T>
 802 | struct vec<T, 3> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'vec<double, 3> &&' for 1st argument
 803 |   T x, y, z;
 804 |   constexpr vec() : x(), y(), z() {}
 805 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 806 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 807 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 808 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 809 |   template <class U, int N>
 810 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 811 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 812 |     static_assert(
     :
 824 |
 825 |   template <class U, class = detail::conv_t<vec, U>>
 826 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 3>, vec<int, 3>>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 827 |   template <class U, class = detail::conv_t<U, vec>>
 828 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 3>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 829 |     return converter<U, vec>{}(*this);
 830 |   }
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:464:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
462 |    */
463 |   constexpr double Scale() const {
464 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
465 |     return la::max(absMax.x, absMax.y);
466 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:778:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
 776 | };
 777 | template <class T>
 778 | struct vec<T, 2> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'vec<double, 2> &&' for 1st argument
 779 |   T x, y;
 780 |   constexpr vec() : x(), y() {}
 781 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 782 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 783 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 784 |   template <class U, int N>
 785 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 786 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 787 |     static_assert(
     :
 793 |
 794 |   template <class U, class = detail::conv_t<vec, U>>
 795 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 2>, vec<int, 2>>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 796 |   template <class U, class = detail::conv_t<U, vec>>
 797 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 2>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 798 |     return converter<U, vec>{}(*this);
 799 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:17: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | internal import ManifoldCPP
   |                 `- error: could not build C module 'ManifoldCPP'
 3 | internal import ManifoldBridge
 4 |
[21/26] Compiling Manifold3D MeshGL.swift
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 25 |
 26 | #include "./math.h"
 27 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 28 |
 29 | namespace manifold {
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:294:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
292 |    */
293 |   constexpr double Scale() const {
294 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
295 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
296 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:802:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
 800 | };
 801 | template <class T>
 802 | struct vec<T, 3> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'vec<double, 3> &&' for 1st argument
 803 |   T x, y, z;
 804 |   constexpr vec() : x(), y(), z() {}
 805 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 806 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 807 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 808 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 809 |   template <class U, int N>
 810 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 811 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 812 |     static_assert(
     :
 824 |
 825 |   template <class U, class = detail::conv_t<vec, U>>
 826 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 3>, vec<int, 3>>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 827 |   template <class U, class = detail::conv_t<U, vec>>
 828 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 3>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 829 |     return converter<U, vec>{}(*this);
 830 |   }
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:464:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
462 |    */
463 |   constexpr double Scale() const {
464 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
465 |     return la::max(absMax.x, absMax.y);
466 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:778:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
 776 | };
 777 | template <class T>
 778 | struct vec<T, 2> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'vec<double, 2> &&' for 1st argument
 779 |   T x, y;
 780 |   constexpr vec() : x(), y() {}
 781 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 782 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 783 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 784 |   template <class U, int N>
 785 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 786 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 787 |     static_assert(
     :
 793 |
 794 |   template <class U, class = detail::conv_t<vec, U>>
 795 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 2>, vec<int, 2>>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 796 |   template <class U, class = detail::conv_t<U, vec>>
 797 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 2>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 798 |     return converter<U, vec>{}(*this);
 799 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:17: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | internal import ManifoldCPP
   |                 `- error: could not build C module 'ManifoldCPP'
 3 | internal import ManifoldBridge
 4 |
[22/26] Compiling Manifold3D Quality.swift
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 25 |
 26 | #include "./math.h"
 27 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 28 |
 29 | namespace manifold {
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:294:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
292 |    */
293 |   constexpr double Scale() const {
294 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
295 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
296 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:802:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
 800 | };
 801 | template <class T>
 802 | struct vec<T, 3> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'vec<double, 3> &&' for 1st argument
 803 |   T x, y, z;
 804 |   constexpr vec() : x(), y(), z() {}
 805 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 806 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 807 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 808 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 809 |   template <class U, int N>
 810 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 811 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 812 |     static_assert(
     :
 824 |
 825 |   template <class U, class = detail::conv_t<vec, U>>
 826 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 3>, vec<int, 3>>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 827 |   template <class U, class = detail::conv_t<U, vec>>
 828 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 3>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 829 |     return converter<U, vec>{}(*this);
 830 |   }
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:464:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
462 |    */
463 |   constexpr double Scale() const {
464 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
465 |     return la::max(absMax.x, absMax.y);
466 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:778:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
 776 | };
 777 | template <class T>
 778 | struct vec<T, 2> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'vec<double, 2> &&' for 1st argument
 779 |   T x, y;
 780 |   constexpr vec() : x(), y() {}
 781 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 782 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 783 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 784 |   template <class U, int N>
 785 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 786 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 787 |     static_assert(
     :
 793 |
 794 |   template <class U, class = detail::conv_t<vec, U>>
 795 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 2>, vec<int, 2>>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 796 |   template <class U, class = detail::conv_t<U, vec>>
 797 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 2>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 798 |     return converter<U, vec>{}(*this);
 799 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:17: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | internal import ManifoldCPP
   |                 `- error: could not build C module 'ManifoldCPP'
 3 | internal import ManifoldBridge
 4 |
[23/26] Compiling Manifold3D BooleanOperation.swift
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 25 |
 26 | #include "./math.h"
 27 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 28 |
 29 | namespace manifold {
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:294:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
292 |    */
293 |   constexpr double Scale() const {
294 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
295 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
296 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:802:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
 800 | };
 801 | template <class T>
 802 | struct vec<T, 3> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'vec<double, 3> &&' for 1st argument
 803 |   T x, y, z;
 804 |   constexpr vec() : x(), y(), z() {}
 805 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 806 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 807 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 808 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 809 |   template <class U, int N>
 810 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 811 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 812 |     static_assert(
     :
 824 |
 825 |   template <class U, class = detail::conv_t<vec, U>>
 826 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 3>, vec<int, 3>>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 827 |   template <class U, class = detail::conv_t<U, vec>>
 828 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 3>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 829 |     return converter<U, vec>{}(*this);
 830 |   }
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:464:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
462 |    */
463 |   constexpr double Scale() const {
464 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
465 |     return la::max(absMax.x, absMax.y);
466 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:778:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
 776 | };
 777 | template <class T>
 778 | struct vec<T, 2> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'vec<double, 2> &&' for 1st argument
 779 |   T x, y;
 780 |   constexpr vec() : x(), y() {}
 781 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 782 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 783 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 784 |   template <class U, int N>
 785 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 786 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 787 |     static_assert(
     :
 793 |
 794 |   template <class U, class = detail::conv_t<vec, U>>
 795 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 2>, vec<int, 2>>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 796 |   template <class U, class = detail::conv_t<U, vec>>
 797 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 2>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 798 |     return converter<U, vec>{}(*this);
 799 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:17: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | internal import ManifoldCPP
   |                 `- error: could not build C module 'ManifoldCPP'
 3 | internal import ManifoldBridge
 4 |
[24/26] Compiling Manifold3D Manifold+Resolve.swift
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 25 |
 26 | #include "./math.h"
 27 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 28 |
 29 | namespace manifold {
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:294:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
292 |    */
293 |   constexpr double Scale() const {
294 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
295 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
296 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:802:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
 800 | };
 801 | template <class T>
 802 | struct vec<T, 3> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'vec<double, 3> &&' for 1st argument
 803 |   T x, y, z;
 804 |   constexpr vec() : x(), y(), z() {}
 805 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 806 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 807 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 808 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 809 |   template <class U, int N>
 810 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 811 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 812 |     static_assert(
     :
 824 |
 825 |   template <class U, class = detail::conv_t<vec, U>>
 826 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 3>, vec<int, 3>>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 827 |   template <class U, class = detail::conv_t<U, vec>>
 828 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 3>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 829 |     return converter<U, vec>{}(*this);
 830 |   }
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:464:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
462 |    */
463 |   constexpr double Scale() const {
464 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
465 |     return la::max(absMax.x, absMax.y);
466 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:778:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
 776 | };
 777 | template <class T>
 778 | struct vec<T, 2> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'vec<double, 2> &&' for 1st argument
 779 |   T x, y;
 780 |   constexpr vec() : x(), y() {}
 781 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 782 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 783 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 784 |   template <class U, int N>
 785 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 786 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 787 |     static_assert(
     :
 793 |
 794 |   template <class U, class = detail::conv_t<vec, U>>
 795 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 2>, vec<int, 2>>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 796 |   template <class U, class = detail::conv_t<U, vec>>
 797 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 2>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 798 |     return converter<U, vec>{}(*this);
 799 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:17: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | internal import ManifoldCPP
   |                 `- error: could not build C module 'ManifoldCPP'
 3 | internal import ManifoldBridge
 4 |
[25/26] Compiling Manifold3D Manifold+Shapes.swift
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 25 |
 26 | #include "./math.h"
 27 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 28 |
 29 | namespace manifold {
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:294:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
292 |    */
293 |   constexpr double Scale() const {
294 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
295 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
296 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:802:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
 800 | };
 801 | template <class T>
 802 | struct vec<T, 3> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'vec<double, 3> &&' for 1st argument
 803 |   T x, y, z;
 804 |   constexpr vec() : x(), y(), z() {}
 805 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 806 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 807 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 808 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 809 |   template <class U, int N>
 810 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 811 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 812 |     static_assert(
     :
 824 |
 825 |   template <class U, class = detail::conv_t<vec, U>>
 826 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 3>, vec<int, 3>>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 827 |   template <class U, class = detail::conv_t<U, vec>>
 828 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 3>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 829 |     return converter<U, vec>{}(*this);
 830 |   }
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:464:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
462 |    */
463 |   constexpr double Scale() const {
464 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
465 |     return la::max(absMax.x, absMax.y);
466 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:778:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
 776 | };
 777 | template <class T>
 778 | struct vec<T, 2> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'vec<double, 2> &&' for 1st argument
 779 |   T x, y;
 780 |   constexpr vec() : x(), y() {}
 781 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 782 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 783 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 784 |   template <class U, int N>
 785 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 786 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 787 |     static_assert(
     :
 793 |
 794 |   template <class U, class = detail::conv_t<vec, U>>
 795 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 2>, vec<int, 2>>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 796 |   template <class U, class = detail::conv_t<U, vec>>
 797 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 2>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 798 |     return converter<U, vec>{}(*this);
 799 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:17: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | internal import ManifoldCPP
   |                 `- error: could not build C module 'ManifoldCPP'
 3 | internal import ManifoldBridge
 4 |
[26/26] Compiling Manifold3D Manifold+Smoothing.swift
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 25 |
 26 | #include "./math.h"
 27 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:27:
 28 |
 29 | namespace manifold {
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:294:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
292 |    */
293 |   constexpr double Scale() const {
294 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
295 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
296 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:802:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
 800 | };
 801 | template <class T>
 802 | struct vec<T, 3> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'const vec<double, 3> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 3>, vec<int, 3>>' (aka 'vec<int, 3>') to 'vec<double, 3> &&' for 1st argument
 803 |   T x, y, z;
 804 |   constexpr vec() : x(), y(), z() {}
 805 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 806 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 807 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 808 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 809 |   template <class U, int N>
 810 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 811 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 812 |     static_assert(
     :
 824 |
 825 |   template <class U, class = detail::conv_t<vec, U>>
 826 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 3>, vec<int, 3>>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 827 |   template <class U, class = detail::conv_t<U, vec>>
 828 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 3>]: type 'converter<vec<double, 3>, vec<int, 3>>' does not provide a call operator
 829 |     return converter<U, vec>{}(*this);
 830 |   }
<module-includes>:1:10: note: in file included from <module-includes>:1:
 1 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/common.h"
   |          `- note: in file included from <module-includes>:1:
 2 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/cross_section.h"
 3 | #include "/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h"
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:464:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
462 |    */
463 |   constexpr double Scale() const {
464 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
465 |     return la::max(absMax.x, absMax.y);
466 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:778:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
 776 | };
 777 | template <class T>
 778 | struct vec<T, 2> {
     |        |- note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'const vec<double, 2> &' for 1st argument
     |        `- note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'apply_t<detail::max, vec<int, 2>, vec<int, 2>>' (aka 'vec<int, 2>') to 'vec<double, 2> &&' for 1st argument
 779 |   T x, y;
 780 |   constexpr vec() : x(), y() {}
 781 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 782 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 783 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 784 |   template <class U, int N>
 785 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 786 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 787 |     static_assert(
     :
 793 |
 794 |   template <class U, class = detail::conv_t<vec, U>>
 795 |   constexpr vec(const U& u) : vec(converter<vec, U>{}(u)) {}
     |             `- note: candidate template ignored: substitution failure [with U = apply_t<detail::max, vec<int, 2>, vec<int, 2>>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 796 |   template <class U, class = detail::conv_t<U, vec>>
 797 |   constexpr operator U() const {
     |             `- note: candidate template ignored: substitution failure [with U = linalg::vec<double, 2>]: type 'converter<vec<double, 2>, vec<int, 2>>' does not provide a call operator
 798 |     return converter<U, vec>{}(*this);
 799 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:17: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | internal import ManifoldCPP
   |                 `- error: could not build C module 'ManifoldCPP'
 3 | internal import ManifoldBridge
 4 |
BUILD FAILURE 6.1 android