The Swift Package Index logo.Swift Package Index

Has it really been five years since Swift Package Index launched? Read our anniversary blog post!

Build Information

Failed to build manifold-swift, reference main (a0942d), with Swift 6.1 for Android on 31 May 2025 01:59:40 UTC.

Build Command

bash -c docker run --pull=always --rm -v "checkouts-4606859-3":/host -w "$PWD" registry.gitlab.com/finestructure/spi-images:android-6.1-latest swift build --swift-sdk aarch64-unknown-linux-android24 2>&1

Build Log

     |                      `- note: explicit constructor is not a candidate
 900 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 901 |     static_assert(
     :
 915 |
 916 |   template <class U, class = detail::conv_t<vec, U>>
 917 |   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
 918 |   template <class U, class = detail::conv_t<U, vec>>
 919 |   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
 920 |     return converter<U, vec>{}(*this);
 921 |   }
<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:348:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
346 |    */
347 |   constexpr double Scale() const {
348 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
349 |     return la::max(absMax.x, absMax.y);
350 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:867: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
 865 | };
 866 | template <class T>
 867 | 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
 868 |   T x, y;
 869 |   constexpr vec() : x(), y() {}
 870 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 871 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 872 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 873 |   template <class U, int N>
 874 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 875 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 876 |     static_assert(
     :
 882 |
 883 |   template <class U, class = detail::conv_t<vec, U>>
 884 |   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
 885 |   template <class U, class = detail::conv_t<U, vec>>
 886 |   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
 887 |     return converter<U, vec>{}(*this);
 888 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:8: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | import ManifoldCPP
   |        `- error: could not build C module 'ManifoldCPP'
 3 | import ManifoldBridge
 4 |
[80/80] 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:23:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 21 | #endif
 22 |
 23 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 24 | #include "optional_assert.h"
 25 |
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:190:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
188 |    */
189 |   constexpr double Scale() const {
190 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
191 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
192 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:891: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
 889 | };
 890 | template <class T>
 891 | 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
 892 |   T x, y, z;
 893 |   constexpr vec() : x(), y(), z() {}
 894 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 895 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 896 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 897 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 898 |   template <class U, int N>
 899 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 900 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 901 |     static_assert(
     :
 915 |
 916 |   template <class U, class = detail::conv_t<vec, U>>
 917 |   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
 918 |   template <class U, class = detail::conv_t<U, vec>>
 919 |   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
 920 |     return converter<U, vec>{}(*this);
 921 |   }
<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:348:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
346 |    */
347 |   constexpr double Scale() const {
348 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
349 |     return la::max(absMax.x, absMax.y);
350 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:867: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
 865 | };
 866 | template <class T>
 867 | 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
 868 |   T x, y;
 869 |   constexpr vec() : x(), y() {}
 870 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 871 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 872 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 873 |   template <class U, int N>
 874 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 875 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 876 |     static_assert(
     :
 882 |
 883 |   template <class U, class = detail::conv_t<vec, U>>
 884 |   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
 885 |   template <class U, class = detail::conv_t<U, vec>>
 886 |   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
 887 |     return converter<U, vec>{}(*this);
 888 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:8: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | import ManifoldCPP
   |        `- error: could not build C module 'ManifoldCPP'
 3 | import ManifoldBridge
 4 |
Running build ...
bash -c docker run --pull=always --rm -v "checkouts-4606859-3":/host -w "$PWD" registry.gitlab.com/finestructure/spi-images:android-6.1-latest swift build --swift-sdk aarch64-unknown-linux-android24 2>&1
android-6.1-latest: Pulling from finestructure/spi-images
Digest: sha256:fe1962677657b2408c217cb5cceb3c09bc1d91486e360cebbc6eee461a5945d8
Status: Image is up to date for registry.gitlab.com/finestructure/spi-images:android-6.1-latest
[0/1] Planning build
Building for debugging...
[0/1] Write swift-version-24593BA9C3E375BF.txt
[2/23] 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:23:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 21 | #endif
 22 |
 23 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 24 | #include "optional_assert.h"
 25 |
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:190:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
188 |    */
189 |   constexpr double Scale() const {
190 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
191 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
192 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:891: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
 889 | };
 890 | template <class T>
 891 | 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
 892 |   T x, y, z;
 893 |   constexpr vec() : x(), y(), z() {}
 894 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 895 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 896 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 897 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 898 |   template <class U, int N>
 899 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 900 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 901 |     static_assert(
     :
 915 |
 916 |   template <class U, class = detail::conv_t<vec, U>>
 917 |   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
 918 |   template <class U, class = detail::conv_t<U, vec>>
 919 |   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
 920 |     return converter<U, vec>{}(*this);
 921 |   }
<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:348:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
346 |    */
347 |   constexpr double Scale() const {
348 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
349 |     return la::max(absMax.x, absMax.y);
350 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:867: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
 865 | };
 866 | template <class T>
 867 | 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
 868 |   T x, y;
 869 |   constexpr vec() : x(), y() {}
 870 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 871 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 872 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 873 |   template <class U, int N>
 874 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 875 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 876 |     static_assert(
     :
 882 |
 883 |   template <class U, class = detail::conv_t<vec, U>>
 884 |   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
 885 |   template <class U, class = detail::conv_t<U, vec>>
 886 |   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
 887 |     return converter<U, vec>{}(*this);
 888 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:8: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | import ManifoldCPP
   |        `- error: could not build C module 'ManifoldCPP'
 3 | import ManifoldBridge
 4 |
[3/23] 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:23:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 21 | #endif
 22 |
 23 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 24 | #include "optional_assert.h"
 25 |
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:190:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
188 |    */
189 |   constexpr double Scale() const {
190 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
191 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
192 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:891: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
 889 | };
 890 | template <class T>
 891 | 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
 892 |   T x, y, z;
 893 |   constexpr vec() : x(), y(), z() {}
 894 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 895 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 896 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 897 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 898 |   template <class U, int N>
 899 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 900 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 901 |     static_assert(
     :
 915 |
 916 |   template <class U, class = detail::conv_t<vec, U>>
 917 |   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
 918 |   template <class U, class = detail::conv_t<U, vec>>
 919 |   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
 920 |     return converter<U, vec>{}(*this);
 921 |   }
<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:348:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
346 |    */
347 |   constexpr double Scale() const {
348 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
349 |     return la::max(absMax.x, absMax.y);
350 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:867: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
 865 | };
 866 | template <class T>
 867 | 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
 868 |   T x, y;
 869 |   constexpr vec() : x(), y() {}
 870 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 871 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 872 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 873 |   template <class U, int N>
 874 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 875 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 876 |     static_assert(
     :
 882 |
 883 |   template <class U, class = detail::conv_t<vec, U>>
 884 |   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
 885 |   template <class U, class = detail::conv_t<U, vec>>
 886 |   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
 887 |     return converter<U, vec>{}(*this);
 888 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:8: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | import ManifoldCPP
   |        `- error: could not build C module 'ManifoldCPP'
 3 | import ManifoldBridge
 4 |
[4/23] Compiling Manifold3D Extensions.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:23:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 21 | #endif
 22 |
 23 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 24 | #include "optional_assert.h"
 25 |
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:190:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
188 |    */
189 |   constexpr double Scale() const {
190 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
191 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
192 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:891: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
 889 | };
 890 | template <class T>
 891 | 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
 892 |   T x, y, z;
 893 |   constexpr vec() : x(), y(), z() {}
 894 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 895 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 896 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 897 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 898 |   template <class U, int N>
 899 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 900 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 901 |     static_assert(
     :
 915 |
 916 |   template <class U, class = detail::conv_t<vec, U>>
 917 |   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
 918 |   template <class U, class = detail::conv_t<U, vec>>
 919 |   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
 920 |     return converter<U, vec>{}(*this);
 921 |   }
<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:348:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
346 |    */
347 |   constexpr double Scale() const {
348 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
349 |     return la::max(absMax.x, absMax.y);
350 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:867: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
 865 | };
 866 | template <class T>
 867 | 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
 868 |   T x, y;
 869 |   constexpr vec() : x(), y() {}
 870 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 871 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 872 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 873 |   template <class U, int N>
 874 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 875 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 876 |     static_assert(
     :
 882 |
 883 |   template <class U, class = detail::conv_t<vec, U>>
 884 |   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
 885 |   template <class U, class = detail::conv_t<U, vec>>
 886 |   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
 887 |     return converter<U, vec>{}(*this);
 888 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:8: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | import ManifoldCPP
   |        `- error: could not build C module 'ManifoldCPP'
 3 | import ManifoldBridge
 4 |
[5/23] 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:23:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 21 | #endif
 22 |
 23 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 24 | #include "optional_assert.h"
 25 |
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:616:52: warning: using integer absolute value function 'abs' when argument is of floating point type
 282 | template <class F, int M, class A>
 283 | struct apply<F, scalars_t<>, vec<A, M>> {
 284 |   using type = vec<ret_t<F, A>, M>;
     |                    `- note: in instantiation of template type alias 'ret_t' requested here
 285 |   enum { size = M, mm = 0 };
 286 |   template <int... I>
     :
 614 | struct std_abs {
 615 |   template <class A>
 616 |   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'
 617 |     return std::abs(a);
 618 |   }
     :
1265 | // be used with return type SFINAE to constrain overload sets
1266 | template <class F, class... A>
1267 | 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
1268 | template <class F, class... A>
1269 | using mm_apply_t = typename std::enable_if<detail::apply<F, void, A...>::mm,
     :
1551 | }
1552 | template <class A>
1553 | constexpr apply_t<detail::std_abs, A> abs(const A& a) {
     |           `- note: in instantiation of template type alias 'apply_t' requested here
1554 |   return apply(detail::std_abs{}, a);
1555 | }
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:190:27: note: while substituting deduced template arguments into function template 'abs' [with A = vec3]
 21 | #endif
 22 |
 23 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 24 | #include "optional_assert.h"
 25 |
    :
188 |    */
189 |   constexpr double Scale() const {
190 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |                           `- note: while substituting deduced template arguments into function template 'abs' [with A = vec3]
191 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
192 |   }
<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:617:12: warning: using integer absolute value function 'abs' when argument is of floating point type
 286 |   template <int... I>
 287 |   static constexpr type impl(seq<I...>, F f, const vec<A, M>& a) {
 288 |     return {f(getter<I>{}(a))...};
     |             `- note: in instantiation of function template specialization 'linalg::detail::std_abs::operator()<double>' requested here
 289 |   }
 290 | };
     :
 615 |   template <class A>
 616 |   constexpr auto operator()(A a) const -> decltype(std::abs(a)) {
 617 |     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'
 618 |   }
 619 | };
     :
1281 | template <class F, class... A>
1282 | constexpr apply_t<F, A...> apply(F func, const A&... args) {
1283 |   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
1284 |       detail::make_seq<0, detail::apply<F, void, A...>::size>{}, func, args...);
1285 | }
     :
1552 | template <class A>
1553 | constexpr apply_t<detail::std_abs, A> abs(const A& a) {
1554 |   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
1555 | }
1556 | template <class A>
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:190:31: note: in instantiation of function template specialization 'linalg::abs<linalg::vec<double, 3>>' requested here
188 |    */
189 |   constexpr double Scale() const {
190 |     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
191 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
192 |   }
<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:190:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
188 |    */
189 |   constexpr double Scale() const {
190 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
191 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
192 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:891: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
 889 | };
 890 | template <class T>
 891 | 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
 892 |   T x, y, z;
 893 |   constexpr vec() : x(), y(), z() {}
 894 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 895 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 896 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 897 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 898 |   template <class U, int N>
 899 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 900 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 901 |     static_assert(
     :
 915 |
 916 |   template <class U, class = detail::conv_t<vec, U>>
 917 |   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
 918 |   template <class U, class = detail::conv_t<U, vec>>
 919 |   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
 920 |     return converter<U, vec>{}(*this);
 921 |   }
<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:348:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
346 |    */
347 |   constexpr double Scale() const {
348 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
349 |     return la::max(absMax.x, absMax.y);
350 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:867: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
 865 | };
 866 | template <class T>
 867 | 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
 868 |   T x, y;
 869 |   constexpr vec() : x(), y() {}
 870 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 871 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 872 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 873 |   template <class U, int N>
 874 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 875 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 876 |     static_assert(
     :
 882 |
 883 |   template <class U, class = detail::conv_t<vec, U>>
 884 |   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
 885 |   template <class U, class = detail::conv_t<U, vec>>
 886 |   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
 887 |     return converter<U, vec>{}(*this);
 888 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:8: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | import ManifoldCPP
   |        `- error: could not build C module 'ManifoldCPP'
 3 | import ManifoldBridge
 4 |
[6/23] 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:23:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 21 | #endif
 22 |
 23 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 24 | #include "optional_assert.h"
 25 |
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:616:52: warning: using integer absolute value function 'abs' when argument is of floating point type
 282 | template <class F, int M, class A>
 283 | struct apply<F, scalars_t<>, vec<A, M>> {
 284 |   using type = vec<ret_t<F, A>, M>;
     |                    `- note: in instantiation of template type alias 'ret_t' requested here
 285 |   enum { size = M, mm = 0 };
 286 |   template <int... I>
     :
 614 | struct std_abs {
 615 |   template <class A>
 616 |   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'
 617 |     return std::abs(a);
 618 |   }
     :
1265 | // be used with return type SFINAE to constrain overload sets
1266 | template <class F, class... A>
1267 | 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
1268 | template <class F, class... A>
1269 | using mm_apply_t = typename std::enable_if<detail::apply<F, void, A...>::mm,
     :
1551 | }
1552 | template <class A>
1553 | constexpr apply_t<detail::std_abs, A> abs(const A& a) {
     |           `- note: in instantiation of template type alias 'apply_t' requested here
1554 |   return apply(detail::std_abs{}, a);
1555 | }
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:190:27: note: while substituting deduced template arguments into function template 'abs' [with A = vec3]
 21 | #endif
 22 |
 23 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 24 | #include "optional_assert.h"
 25 |
    :
188 |    */
189 |   constexpr double Scale() const {
190 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |                           `- note: while substituting deduced template arguments into function template 'abs' [with A = vec3]
191 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
192 |   }
<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:617:12: warning: using integer absolute value function 'abs' when argument is of floating point type
 286 |   template <int... I>
 287 |   static constexpr type impl(seq<I...>, F f, const vec<A, M>& a) {
 288 |     return {f(getter<I>{}(a))...};
     |             `- note: in instantiation of function template specialization 'linalg::detail::std_abs::operator()<double>' requested here
 289 |   }
 290 | };
     :
 615 |   template <class A>
 616 |   constexpr auto operator()(A a) const -> decltype(std::abs(a)) {
 617 |     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'
 618 |   }
 619 | };
     :
1281 | template <class F, class... A>
1282 | constexpr apply_t<F, A...> apply(F func, const A&... args) {
1283 |   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
1284 |       detail::make_seq<0, detail::apply<F, void, A...>::size>{}, func, args...);
1285 | }
     :
1552 | template <class A>
1553 | constexpr apply_t<detail::std_abs, A> abs(const A& a) {
1554 |   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
1555 | }
1556 | template <class A>
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:190:31: note: in instantiation of function template specialization 'linalg::abs<linalg::vec<double, 3>>' requested here
188 |    */
189 |   constexpr double Scale() const {
190 |     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
191 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
192 |   }
<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:190:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
188 |    */
189 |   constexpr double Scale() const {
190 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
191 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
192 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:891: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
 889 | };
 890 | template <class T>
 891 | 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
 892 |   T x, y, z;
 893 |   constexpr vec() : x(), y(), z() {}
 894 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 895 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 896 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 897 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 898 |   template <class U, int N>
 899 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 900 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 901 |     static_assert(
     :
 915 |
 916 |   template <class U, class = detail::conv_t<vec, U>>
 917 |   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
 918 |   template <class U, class = detail::conv_t<U, vec>>
 919 |   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
 920 |     return converter<U, vec>{}(*this);
 921 |   }
<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:348:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
346 |    */
347 |   constexpr double Scale() const {
348 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
349 |     return la::max(absMax.x, absMax.y);
350 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:867: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
 865 | };
 866 | template <class T>
 867 | 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
 868 |   T x, y;
 869 |   constexpr vec() : x(), y() {}
 870 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 871 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 872 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 873 |   template <class U, int N>
 874 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 875 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 876 |     static_assert(
     :
 882 |
 883 |   template <class U, class = detail::conv_t<vec, U>>
 884 |   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
 885 |   template <class U, class = detail::conv_t<U, vec>>
 886 |   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
 887 |     return converter<U, vec>{}(*this);
 888 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:8: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | import ManifoldCPP
   |        `- error: could not build C module 'ManifoldCPP'
 3 | import ManifoldBridge
 4 |
[7/23] 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:23:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 21 | #endif
 22 |
 23 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 24 | #include "optional_assert.h"
 25 |
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:616:52: warning: using integer absolute value function 'abs' when argument is of floating point type
 282 | template <class F, int M, class A>
 283 | struct apply<F, scalars_t<>, vec<A, M>> {
 284 |   using type = vec<ret_t<F, A>, M>;
     |                    `- note: in instantiation of template type alias 'ret_t' requested here
 285 |   enum { size = M, mm = 0 };
 286 |   template <int... I>
     :
 614 | struct std_abs {
 615 |   template <class A>
 616 |   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'
 617 |     return std::abs(a);
 618 |   }
     :
1265 | // be used with return type SFINAE to constrain overload sets
1266 | template <class F, class... A>
1267 | 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
1268 | template <class F, class... A>
1269 | using mm_apply_t = typename std::enable_if<detail::apply<F, void, A...>::mm,
     :
1551 | }
1552 | template <class A>
1553 | constexpr apply_t<detail::std_abs, A> abs(const A& a) {
     |           `- note: in instantiation of template type alias 'apply_t' requested here
1554 |   return apply(detail::std_abs{}, a);
1555 | }
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:190:27: note: while substituting deduced template arguments into function template 'abs' [with A = vec3]
 21 | #endif
 22 |
 23 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 24 | #include "optional_assert.h"
 25 |
    :
188 |    */
189 |   constexpr double Scale() const {
190 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |                           `- note: while substituting deduced template arguments into function template 'abs' [with A = vec3]
191 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
192 |   }
<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:617:12: warning: using integer absolute value function 'abs' when argument is of floating point type
 286 |   template <int... I>
 287 |   static constexpr type impl(seq<I...>, F f, const vec<A, M>& a) {
 288 |     return {f(getter<I>{}(a))...};
     |             `- note: in instantiation of function template specialization 'linalg::detail::std_abs::operator()<double>' requested here
 289 |   }
 290 | };
     :
 615 |   template <class A>
 616 |   constexpr auto operator()(A a) const -> decltype(std::abs(a)) {
 617 |     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'
 618 |   }
 619 | };
     :
1281 | template <class F, class... A>
1282 | constexpr apply_t<F, A...> apply(F func, const A&... args) {
1283 |   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
1284 |       detail::make_seq<0, detail::apply<F, void, A...>::size>{}, func, args...);
1285 | }
     :
1552 | template <class A>
1553 | constexpr apply_t<detail::std_abs, A> abs(const A& a) {
1554 |   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
1555 | }
1556 | template <class A>
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:190:31: note: in instantiation of function template specialization 'linalg::abs<linalg::vec<double, 3>>' requested here
188 |    */
189 |   constexpr double Scale() const {
190 |     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
191 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
192 |   }
<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:190:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
188 |    */
189 |   constexpr double Scale() const {
190 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
191 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
192 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:891: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
 889 | };
 890 | template <class T>
 891 | 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
 892 |   T x, y, z;
 893 |   constexpr vec() : x(), y(), z() {}
 894 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 895 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 896 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 897 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 898 |   template <class U, int N>
 899 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 900 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 901 |     static_assert(
     :
 915 |
 916 |   template <class U, class = detail::conv_t<vec, U>>
 917 |   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
 918 |   template <class U, class = detail::conv_t<U, vec>>
 919 |   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
 920 |     return converter<U, vec>{}(*this);
 921 |   }
<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:348:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
346 |    */
347 |   constexpr double Scale() const {
348 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
349 |     return la::max(absMax.x, absMax.y);
350 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:867: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
 865 | };
 866 | template <class T>
 867 | 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
 868 |   T x, y;
 869 |   constexpr vec() : x(), y() {}
 870 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 871 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 872 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 873 |   template <class U, int N>
 874 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 875 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 876 |     static_assert(
     :
 882 |
 883 |   template <class U, class = detail::conv_t<vec, U>>
 884 |   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
 885 |   template <class U, class = detail::conv_t<U, vec>>
 886 |   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
 887 |     return converter<U, vec>{}(*this);
 888 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:8: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | import ManifoldCPP
   |        `- error: could not build C module 'ManifoldCPP'
 3 | import ManifoldBridge
 4 |
error: emit-module command failed with exit code 1 (use -v to see invocation)
[8/25] 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:23:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 21 | #endif
 22 |
 23 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 24 | #include "optional_assert.h"
 25 |
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:616:52: warning: using integer absolute value function 'abs' when argument is of floating point type
 282 | template <class F, int M, class A>
 283 | struct apply<F, scalars_t<>, vec<A, M>> {
 284 |   using type = vec<ret_t<F, A>, M>;
     |                    `- note: in instantiation of template type alias 'ret_t' requested here
 285 |   enum { size = M, mm = 0 };
 286 |   template <int... I>
     :
 614 | struct std_abs {
 615 |   template <class A>
 616 |   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'
 617 |     return std::abs(a);
 618 |   }
     :
1265 | // be used with return type SFINAE to constrain overload sets
1266 | template <class F, class... A>
1267 | 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
1268 | template <class F, class... A>
1269 | using mm_apply_t = typename std::enable_if<detail::apply<F, void, A...>::mm,
     :
1551 | }
1552 | template <class A>
1553 | constexpr apply_t<detail::std_abs, A> abs(const A& a) {
     |           `- note: in instantiation of template type alias 'apply_t' requested here
1554 |   return apply(detail::std_abs{}, a);
1555 | }
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:190:27: note: while substituting deduced template arguments into function template 'abs' [with A = vec3]
 21 | #endif
 22 |
 23 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 24 | #include "optional_assert.h"
 25 |
    :
188 |    */
189 |   constexpr double Scale() const {
190 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |                           `- note: while substituting deduced template arguments into function template 'abs' [with A = vec3]
191 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
192 |   }
<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:617:12: warning: using integer absolute value function 'abs' when argument is of floating point type
 286 |   template <int... I>
 287 |   static constexpr type impl(seq<I...>, F f, const vec<A, M>& a) {
 288 |     return {f(getter<I>{}(a))...};
     |             `- note: in instantiation of function template specialization 'linalg::detail::std_abs::operator()<double>' requested here
 289 |   }
 290 | };
     :
 615 |   template <class A>
 616 |   constexpr auto operator()(A a) const -> decltype(std::abs(a)) {
 617 |     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'
 618 |   }
 619 | };
     :
1281 | template <class F, class... A>
1282 | constexpr apply_t<F, A...> apply(F func, const A&... args) {
1283 |   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
1284 |       detail::make_seq<0, detail::apply<F, void, A...>::size>{}, func, args...);
1285 | }
     :
1552 | template <class A>
1553 | constexpr apply_t<detail::std_abs, A> abs(const A& a) {
1554 |   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
1555 | }
1556 | template <class A>
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:190:31: note: in instantiation of function template specialization 'linalg::abs<linalg::vec<double, 3>>' requested here
188 |    */
189 |   constexpr double Scale() const {
190 |     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
191 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
192 |   }
<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:190:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
188 |    */
189 |   constexpr double Scale() const {
190 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
191 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
192 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:891: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
 889 | };
 890 | template <class T>
 891 | 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
 892 |   T x, y, z;
 893 |   constexpr vec() : x(), y(), z() {}
 894 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 895 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 896 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 897 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 898 |   template <class U, int N>
 899 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 900 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 901 |     static_assert(
     :
 915 |
 916 |   template <class U, class = detail::conv_t<vec, U>>
 917 |   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
 918 |   template <class U, class = detail::conv_t<U, vec>>
 919 |   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
 920 |     return converter<U, vec>{}(*this);
 921 |   }
<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:348:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
346 |    */
347 |   constexpr double Scale() const {
348 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
349 |     return la::max(absMax.x, absMax.y);
350 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:867: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
 865 | };
 866 | template <class T>
 867 | 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
 868 |   T x, y;
 869 |   constexpr vec() : x(), y() {}
 870 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 871 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 872 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 873 |   template <class U, int N>
 874 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 875 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 876 |     static_assert(
     :
 882 |
 883 |   template <class U, class = detail::conv_t<vec, U>>
 884 |   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
 885 |   template <class U, class = detail::conv_t<U, vec>>
 886 |   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
 887 |     return converter<U, vec>{}(*this);
 888 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:8: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | import ManifoldCPP
   |        `- error: could not build C module 'ManifoldCPP'
 3 | import ManifoldBridge
 4 |
[9/25] 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:23:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 21 | #endif
 22 |
 23 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 24 | #include "optional_assert.h"
 25 |
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:190:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
188 |    */
189 |   constexpr double Scale() const {
190 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
191 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
192 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:891: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
 889 | };
 890 | template <class T>
 891 | 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
 892 |   T x, y, z;
 893 |   constexpr vec() : x(), y(), z() {}
 894 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 895 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 896 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 897 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 898 |   template <class U, int N>
 899 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 900 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 901 |     static_assert(
     :
 915 |
 916 |   template <class U, class = detail::conv_t<vec, U>>
 917 |   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
 918 |   template <class U, class = detail::conv_t<U, vec>>
 919 |   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
 920 |     return converter<U, vec>{}(*this);
 921 |   }
<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:348:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
346 |    */
347 |   constexpr double Scale() const {
348 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
349 |     return la::max(absMax.x, absMax.y);
350 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:867: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
 865 | };
 866 | template <class T>
 867 | 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
 868 |   T x, y;
 869 |   constexpr vec() : x(), y() {}
 870 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 871 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 872 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 873 |   template <class U, int N>
 874 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 875 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 876 |     static_assert(
     :
 882 |
 883 |   template <class U, class = detail::conv_t<vec, U>>
 884 |   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
 885 |   template <class U, class = detail::conv_t<U, vec>>
 886 |   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
 887 |     return converter<U, vec>{}(*this);
 888 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:8: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | import ManifoldCPP
   |        `- error: could not build C module 'ManifoldCPP'
 3 | import ManifoldBridge
 4 |
[10/25] 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:23:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 21 | #endif
 22 |
 23 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 24 | #include "optional_assert.h"
 25 |
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:190:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
188 |    */
189 |   constexpr double Scale() const {
190 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
191 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
192 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:891: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
 889 | };
 890 | template <class T>
 891 | 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
 892 |   T x, y, z;
 893 |   constexpr vec() : x(), y(), z() {}
 894 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 895 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 896 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 897 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 898 |   template <class U, int N>
 899 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 900 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 901 |     static_assert(
     :
 915 |
 916 |   template <class U, class = detail::conv_t<vec, U>>
 917 |   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
 918 |   template <class U, class = detail::conv_t<U, vec>>
 919 |   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
 920 |     return converter<U, vec>{}(*this);
 921 |   }
<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:348:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
346 |    */
347 |   constexpr double Scale() const {
348 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
349 |     return la::max(absMax.x, absMax.y);
350 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:867: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
 865 | };
 866 | template <class T>
 867 | 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
 868 |   T x, y;
 869 |   constexpr vec() : x(), y() {}
 870 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 871 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 872 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 873 |   template <class U, int N>
 874 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 875 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 876 |     static_assert(
     :
 882 |
 883 |   template <class U, class = detail::conv_t<vec, U>>
 884 |   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
 885 |   template <class U, class = detail::conv_t<U, vec>>
 886 |   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
 887 |     return converter<U, vec>{}(*this);
 888 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:8: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | import ManifoldCPP
   |        `- error: could not build C module 'ManifoldCPP'
 3 | import ManifoldBridge
 4 |
[11/25] 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:23:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 21 | #endif
 22 |
 23 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 24 | #include "optional_assert.h"
 25 |
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:190:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
188 |    */
189 |   constexpr double Scale() const {
190 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
191 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
192 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:891: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
 889 | };
 890 | template <class T>
 891 | 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
 892 |   T x, y, z;
 893 |   constexpr vec() : x(), y(), z() {}
 894 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 895 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 896 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 897 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 898 |   template <class U, int N>
 899 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 900 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 901 |     static_assert(
     :
 915 |
 916 |   template <class U, class = detail::conv_t<vec, U>>
 917 |   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
 918 |   template <class U, class = detail::conv_t<U, vec>>
 919 |   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
 920 |     return converter<U, vec>{}(*this);
 921 |   }
<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:348:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
346 |    */
347 |   constexpr double Scale() const {
348 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
349 |     return la::max(absMax.x, absMax.y);
350 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:867: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
 865 | };
 866 | template <class T>
 867 | 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
 868 |   T x, y;
 869 |   constexpr vec() : x(), y() {}
 870 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 871 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 872 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 873 |   template <class U, int N>
 874 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 875 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 876 |     static_assert(
     :
 882 |
 883 |   template <class U, class = detail::conv_t<vec, U>>
 884 |   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
 885 |   template <class U, class = detail::conv_t<U, vec>>
 886 |   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
 887 |     return converter<U, vec>{}(*this);
 888 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:8: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | import ManifoldCPP
   |        `- error: could not build C module 'ManifoldCPP'
 3 | import ManifoldBridge
 4 |
[12/25] 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:23:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 21 | #endif
 22 |
 23 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 24 | #include "optional_assert.h"
 25 |
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:190:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
188 |    */
189 |   constexpr double Scale() const {
190 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
191 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
192 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:891: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
 889 | };
 890 | template <class T>
 891 | 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
 892 |   T x, y, z;
 893 |   constexpr vec() : x(), y(), z() {}
 894 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 895 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 896 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 897 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 898 |   template <class U, int N>
 899 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 900 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 901 |     static_assert(
     :
 915 |
 916 |   template <class U, class = detail::conv_t<vec, U>>
 917 |   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
 918 |   template <class U, class = detail::conv_t<U, vec>>
 919 |   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
 920 |     return converter<U, vec>{}(*this);
 921 |   }
<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:348:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
346 |    */
347 |   constexpr double Scale() const {
348 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
349 |     return la::max(absMax.x, absMax.y);
350 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:867: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
 865 | };
 866 | template <class T>
 867 | 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
 868 |   T x, y;
 869 |   constexpr vec() : x(), y() {}
 870 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 871 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 872 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 873 |   template <class U, int N>
 874 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 875 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 876 |     static_assert(
     :
 882 |
 883 |   template <class U, class = detail::conv_t<vec, U>>
 884 |   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
 885 |   template <class U, class = detail::conv_t<U, vec>>
 886 |   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
 887 |     return converter<U, vec>{}(*this);
 888 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:8: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | import ManifoldCPP
   |        `- error: could not build C module 'ManifoldCPP'
 3 | import ManifoldBridge
 4 |
[13/25] 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:23:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 21 | #endif
 22 |
 23 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 24 | #include "optional_assert.h"
 25 |
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:190:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
188 |    */
189 |   constexpr double Scale() const {
190 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
191 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
192 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:891: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
 889 | };
 890 | template <class T>
 891 | 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
 892 |   T x, y, z;
 893 |   constexpr vec() : x(), y(), z() {}
 894 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 895 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 896 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 897 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 898 |   template <class U, int N>
 899 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 900 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 901 |     static_assert(
     :
 915 |
 916 |   template <class U, class = detail::conv_t<vec, U>>
 917 |   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
 918 |   template <class U, class = detail::conv_t<U, vec>>
 919 |   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
 920 |     return converter<U, vec>{}(*this);
 921 |   }
<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:348:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
346 |    */
347 |   constexpr double Scale() const {
348 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
349 |     return la::max(absMax.x, absMax.y);
350 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:867: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
 865 | };
 866 | template <class T>
 867 | 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
 868 |   T x, y;
 869 |   constexpr vec() : x(), y() {}
 870 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 871 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 872 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 873 |   template <class U, int N>
 874 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 875 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 876 |     static_assert(
     :
 882 |
 883 |   template <class U, class = detail::conv_t<vec, U>>
 884 |   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
 885 |   template <class U, class = detail::conv_t<U, vec>>
 886 |   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
 887 |     return converter<U, vec>{}(*this);
 888 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:8: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | import ManifoldCPP
   |        `- error: could not build C module 'ManifoldCPP'
 3 | import ManifoldBridge
 4 |
[14/25] 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:23:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 21 | #endif
 22 |
 23 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 24 | #include "optional_assert.h"
 25 |
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:190:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
188 |    */
189 |   constexpr double Scale() const {
190 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
191 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
192 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:891: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
 889 | };
 890 | template <class T>
 891 | 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
 892 |   T x, y, z;
 893 |   constexpr vec() : x(), y(), z() {}
 894 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 895 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 896 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 897 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 898 |   template <class U, int N>
 899 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 900 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 901 |     static_assert(
     :
 915 |
 916 |   template <class U, class = detail::conv_t<vec, U>>
 917 |   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
 918 |   template <class U, class = detail::conv_t<U, vec>>
 919 |   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
 920 |     return converter<U, vec>{}(*this);
 921 |   }
<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:348:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
346 |    */
347 |   constexpr double Scale() const {
348 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
349 |     return la::max(absMax.x, absMax.y);
350 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:867: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
 865 | };
 866 | template <class T>
 867 | 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
 868 |   T x, y;
 869 |   constexpr vec() : x(), y() {}
 870 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 871 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 872 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 873 |   template <class U, int N>
 874 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 875 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 876 |     static_assert(
     :
 882 |
 883 |   template <class U, class = detail::conv_t<vec, U>>
 884 |   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
 885 |   template <class U, class = detail::conv_t<U, vec>>
 886 |   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
 887 |     return converter<U, vec>{}(*this);
 888 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:8: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | import ManifoldCPP
   |        `- error: could not build C module 'ManifoldCPP'
 3 | import ManifoldBridge
 4 |
[15/25] 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:23:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 21 | #endif
 22 |
 23 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 24 | #include "optional_assert.h"
 25 |
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:190:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
188 |    */
189 |   constexpr double Scale() const {
190 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
191 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
192 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:891: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
 889 | };
 890 | template <class T>
 891 | 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
 892 |   T x, y, z;
 893 |   constexpr vec() : x(), y(), z() {}
 894 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 895 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 896 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 897 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 898 |   template <class U, int N>
 899 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 900 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 901 |     static_assert(
     :
 915 |
 916 |   template <class U, class = detail::conv_t<vec, U>>
 917 |   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
 918 |   template <class U, class = detail::conv_t<U, vec>>
 919 |   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
 920 |     return converter<U, vec>{}(*this);
 921 |   }
<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:348:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
346 |    */
347 |   constexpr double Scale() const {
348 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
349 |     return la::max(absMax.x, absMax.y);
350 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:867: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
 865 | };
 866 | template <class T>
 867 | 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
 868 |   T x, y;
 869 |   constexpr vec() : x(), y() {}
 870 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 871 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 872 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 873 |   template <class U, int N>
 874 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 875 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 876 |     static_assert(
     :
 882 |
 883 |   template <class U, class = detail::conv_t<vec, U>>
 884 |   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
 885 |   template <class U, class = detail::conv_t<U, vec>>
 886 |   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
 887 |     return converter<U, vec>{}(*this);
 888 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:8: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | import ManifoldCPP
   |        `- error: could not build C module 'ManifoldCPP'
 3 | import ManifoldBridge
 4 |
[16/25] 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:23:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 21 | #endif
 22 |
 23 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 24 | #include "optional_assert.h"
 25 |
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:190:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
188 |    */
189 |   constexpr double Scale() const {
190 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
191 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
192 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:891: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
 889 | };
 890 | template <class T>
 891 | 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
 892 |   T x, y, z;
 893 |   constexpr vec() : x(), y(), z() {}
 894 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 895 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 896 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 897 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 898 |   template <class U, int N>
 899 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 900 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 901 |     static_assert(
     :
 915 |
 916 |   template <class U, class = detail::conv_t<vec, U>>
 917 |   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
 918 |   template <class U, class = detail::conv_t<U, vec>>
 919 |   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
 920 |     return converter<U, vec>{}(*this);
 921 |   }
<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:348:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
346 |    */
347 |   constexpr double Scale() const {
348 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
349 |     return la::max(absMax.x, absMax.y);
350 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:867: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
 865 | };
 866 | template <class T>
 867 | 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
 868 |   T x, y;
 869 |   constexpr vec() : x(), y() {}
 870 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 871 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 872 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 873 |   template <class U, int N>
 874 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 875 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 876 |     static_assert(
     :
 882 |
 883 |   template <class U, class = detail::conv_t<vec, U>>
 884 |   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
 885 |   template <class U, class = detail::conv_t<U, vec>>
 886 |   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
 887 |     return converter<U, vec>{}(*this);
 888 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:8: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | import ManifoldCPP
   |        `- error: could not build C module 'ManifoldCPP'
 3 | import ManifoldBridge
 4 |
[17/25] 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:23:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 21 | #endif
 22 |
 23 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 24 | #include "optional_assert.h"
 25 |
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:190:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
188 |    */
189 |   constexpr double Scale() const {
190 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
191 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
192 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:891: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
 889 | };
 890 | template <class T>
 891 | 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
 892 |   T x, y, z;
 893 |   constexpr vec() : x(), y(), z() {}
 894 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 895 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 896 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 897 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 898 |   template <class U, int N>
 899 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 900 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 901 |     static_assert(
     :
 915 |
 916 |   template <class U, class = detail::conv_t<vec, U>>
 917 |   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
 918 |   template <class U, class = detail::conv_t<U, vec>>
 919 |   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
 920 |     return converter<U, vec>{}(*this);
 921 |   }
<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:348:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
346 |    */
347 |   constexpr double Scale() const {
348 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
349 |     return la::max(absMax.x, absMax.y);
350 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:867: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
 865 | };
 866 | template <class T>
 867 | 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
 868 |   T x, y;
 869 |   constexpr vec() : x(), y() {}
 870 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 871 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 872 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 873 |   template <class U, int N>
 874 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 875 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 876 |     static_assert(
     :
 882 |
 883 |   template <class U, class = detail::conv_t<vec, U>>
 884 |   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
 885 |   template <class U, class = detail::conv_t<U, vec>>
 886 |   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
 887 |     return converter<U, vec>{}(*this);
 888 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:8: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | import ManifoldCPP
   |        `- error: could not build C module 'ManifoldCPP'
 3 | import ManifoldBridge
 4 |
[18/25] 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:23:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 21 | #endif
 22 |
 23 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 24 | #include "optional_assert.h"
 25 |
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:190:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
188 |    */
189 |   constexpr double Scale() const {
190 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
191 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
192 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:891: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
 889 | };
 890 | template <class T>
 891 | 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
 892 |   T x, y, z;
 893 |   constexpr vec() : x(), y(), z() {}
 894 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 895 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 896 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 897 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 898 |   template <class U, int N>
 899 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 900 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 901 |     static_assert(
     :
 915 |
 916 |   template <class U, class = detail::conv_t<vec, U>>
 917 |   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
 918 |   template <class U, class = detail::conv_t<U, vec>>
 919 |   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
 920 |     return converter<U, vec>{}(*this);
 921 |   }
<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:348:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
346 |    */
347 |   constexpr double Scale() const {
348 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
349 |     return la::max(absMax.x, absMax.y);
350 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:867: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
 865 | };
 866 | template <class T>
 867 | 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
 868 |   T x, y;
 869 |   constexpr vec() : x(), y() {}
 870 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 871 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 872 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 873 |   template <class U, int N>
 874 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 875 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 876 |     static_assert(
     :
 882 |
 883 |   template <class U, class = detail::conv_t<vec, U>>
 884 |   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
 885 |   template <class U, class = detail::conv_t<U, vec>>
 886 |   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
 887 |     return converter<U, vec>{}(*this);
 888 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:8: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | import ManifoldCPP
   |        `- error: could not build C module 'ManifoldCPP'
 3 | import ManifoldBridge
 4 |
[19/25] 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:23:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 21 | #endif
 22 |
 23 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 24 | #include "optional_assert.h"
 25 |
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:190:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
188 |    */
189 |   constexpr double Scale() const {
190 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
191 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
192 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:891: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
 889 | };
 890 | template <class T>
 891 | 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
 892 |   T x, y, z;
 893 |   constexpr vec() : x(), y(), z() {}
 894 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 895 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 896 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 897 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 898 |   template <class U, int N>
 899 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 900 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 901 |     static_assert(
     :
 915 |
 916 |   template <class U, class = detail::conv_t<vec, U>>
 917 |   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
 918 |   template <class U, class = detail::conv_t<U, vec>>
 919 |   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
 920 |     return converter<U, vec>{}(*this);
 921 |   }
<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:348:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
346 |    */
347 |   constexpr double Scale() const {
348 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
349 |     return la::max(absMax.x, absMax.y);
350 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:867: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
 865 | };
 866 | template <class T>
 867 | 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
 868 |   T x, y;
 869 |   constexpr vec() : x(), y() {}
 870 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 871 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 872 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 873 |   template <class U, int N>
 874 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 875 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 876 |     static_assert(
     :
 882 |
 883 |   template <class U, class = detail::conv_t<vec, U>>
 884 |   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
 885 |   template <class U, class = detail::conv_t<U, vec>>
 886 |   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
 887 |     return converter<U, vec>{}(*this);
 888 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:8: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | import ManifoldCPP
   |        `- error: could not build C module 'ManifoldCPP'
 3 | import ManifoldBridge
 4 |
[20/25] 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:23:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 21 | #endif
 22 |
 23 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 24 | #include "optional_assert.h"
 25 |
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:190:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
188 |    */
189 |   constexpr double Scale() const {
190 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
191 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
192 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:891: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
 889 | };
 890 | template <class T>
 891 | 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
 892 |   T x, y, z;
 893 |   constexpr vec() : x(), y(), z() {}
 894 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 895 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 896 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 897 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 898 |   template <class U, int N>
 899 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 900 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 901 |     static_assert(
     :
 915 |
 916 |   template <class U, class = detail::conv_t<vec, U>>
 917 |   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
 918 |   template <class U, class = detail::conv_t<U, vec>>
 919 |   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
 920 |     return converter<U, vec>{}(*this);
 921 |   }
<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:348:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
346 |    */
347 |   constexpr double Scale() const {
348 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
349 |     return la::max(absMax.x, absMax.y);
350 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:867: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
 865 | };
 866 | template <class T>
 867 | 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
 868 |   T x, y;
 869 |   constexpr vec() : x(), y() {}
 870 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 871 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 872 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 873 |   template <class U, int N>
 874 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 875 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 876 |     static_assert(
     :
 882 |
 883 |   template <class U, class = detail::conv_t<vec, U>>
 884 |   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
 885 |   template <class U, class = detail::conv_t<U, vec>>
 886 |   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
 887 |     return converter<U, vec>{}(*this);
 888 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:8: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | import ManifoldCPP
   |        `- error: could not build C module 'ManifoldCPP'
 3 | import ManifoldBridge
 4 |
[21/25] 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:23:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 21 | #endif
 22 |
 23 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 24 | #include "optional_assert.h"
 25 |
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:190:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
188 |    */
189 |   constexpr double Scale() const {
190 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
191 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
192 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:891: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
 889 | };
 890 | template <class T>
 891 | 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
 892 |   T x, y, z;
 893 |   constexpr vec() : x(), y(), z() {}
 894 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 895 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 896 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 897 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 898 |   template <class U, int N>
 899 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 900 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 901 |     static_assert(
     :
 915 |
 916 |   template <class U, class = detail::conv_t<vec, U>>
 917 |   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
 918 |   template <class U, class = detail::conv_t<U, vec>>
 919 |   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
 920 |     return converter<U, vec>{}(*this);
 921 |   }
<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:348:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
346 |    */
347 |   constexpr double Scale() const {
348 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
349 |     return la::max(absMax.x, absMax.y);
350 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:867: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
 865 | };
 866 | template <class T>
 867 | 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
 868 |   T x, y;
 869 |   constexpr vec() : x(), y() {}
 870 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 871 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 872 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 873 |   template <class U, int N>
 874 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 875 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 876 |     static_assert(
     :
 882 |
 883 |   template <class U, class = detail::conv_t<vec, U>>
 884 |   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
 885 |   template <class U, class = detail::conv_t<U, vec>>
 886 |   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
 887 |     return converter<U, vec>{}(*this);
 888 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:8: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | import ManifoldCPP
   |        `- error: could not build C module 'ManifoldCPP'
 3 | import ManifoldBridge
 4 |
[22/25] 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:23:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 21 | #endif
 22 |
 23 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 24 | #include "optional_assert.h"
 25 |
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:190:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
188 |    */
189 |   constexpr double Scale() const {
190 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
191 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
192 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:891: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
 889 | };
 890 | template <class T>
 891 | 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
 892 |   T x, y, z;
 893 |   constexpr vec() : x(), y(), z() {}
 894 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 895 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 896 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 897 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 898 |   template <class U, int N>
 899 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 900 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 901 |     static_assert(
     :
 915 |
 916 |   template <class U, class = detail::conv_t<vec, U>>
 917 |   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
 918 |   template <class U, class = detail::conv_t<U, vec>>
 919 |   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
 920 |     return converter<U, vec>{}(*this);
 921 |   }
<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:348:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
346 |    */
347 |   constexpr double Scale() const {
348 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
349 |     return la::max(absMax.x, absMax.y);
350 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:867: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
 865 | };
 866 | template <class T>
 867 | 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
 868 |   T x, y;
 869 |   constexpr vec() : x(), y() {}
 870 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 871 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 872 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 873 |   template <class U, int N>
 874 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 875 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 876 |     static_assert(
     :
 882 |
 883 |   template <class U, class = detail::conv_t<vec, U>>
 884 |   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
 885 |   template <class U, class = detail::conv_t<U, vec>>
 886 |   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
 887 |     return converter<U, vec>{}(*this);
 888 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:8: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | import ManifoldCPP
   |        `- error: could not build C module 'ManifoldCPP'
 3 | import ManifoldBridge
 4 |
[23/25] 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:23:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 21 | #endif
 22 |
 23 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 24 | #include "optional_assert.h"
 25 |
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:190:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
188 |    */
189 |   constexpr double Scale() const {
190 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
191 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
192 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:891: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
 889 | };
 890 | template <class T>
 891 | 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
 892 |   T x, y, z;
 893 |   constexpr vec() : x(), y(), z() {}
 894 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 895 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 896 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 897 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 898 |   template <class U, int N>
 899 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 900 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 901 |     static_assert(
     :
 915 |
 916 |   template <class U, class = detail::conv_t<vec, U>>
 917 |   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
 918 |   template <class U, class = detail::conv_t<U, vec>>
 919 |   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
 920 |     return converter<U, vec>{}(*this);
 921 |   }
<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:348:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
346 |    */
347 |   constexpr double Scale() const {
348 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
349 |     return la::max(absMax.x, absMax.y);
350 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:867: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
 865 | };
 866 | template <class T>
 867 | 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
 868 |   T x, y;
 869 |   constexpr vec() : x(), y() {}
 870 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 871 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 872 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 873 |   template <class U, int N>
 874 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 875 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 876 |     static_assert(
     :
 882 |
 883 |   template <class U, class = detail::conv_t<vec, U>>
 884 |   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
 885 |   template <class U, class = detail::conv_t<U, vec>>
 886 |   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
 887 |     return converter<U, vec>{}(*this);
 888 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:8: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | import ManifoldCPP
   |        `- error: could not build C module 'ManifoldCPP'
 3 | import ManifoldBridge
 4 |
[24/25] 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:23:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 21 | #endif
 22 |
 23 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 24 | #include "optional_assert.h"
 25 |
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:190:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
188 |    */
189 |   constexpr double Scale() const {
190 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
191 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
192 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:891: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
 889 | };
 890 | template <class T>
 891 | 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
 892 |   T x, y, z;
 893 |   constexpr vec() : x(), y(), z() {}
 894 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 895 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 896 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 897 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 898 |   template <class U, int N>
 899 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 900 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 901 |     static_assert(
     :
 915 |
 916 |   template <class U, class = detail::conv_t<vec, U>>
 917 |   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
 918 |   template <class U, class = detail::conv_t<U, vec>>
 919 |   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
 920 |     return converter<U, vec>{}(*this);
 921 |   }
<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:348:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
346 |    */
347 |   constexpr double Scale() const {
348 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
349 |     return la::max(absMax.x, absMax.y);
350 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:867: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
 865 | };
 866 | template <class T>
 867 | 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
 868 |   T x, y;
 869 |   constexpr vec() : x(), y() {}
 870 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 871 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 872 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 873 |   template <class U, int N>
 874 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 875 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 876 |     static_assert(
     :
 882 |
 883 |   template <class U, class = detail::conv_t<vec, U>>
 884 |   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
 885 |   template <class U, class = detail::conv_t<U, vec>>
 886 |   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
 887 |     return converter<U, vec>{}(*this);
 888 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:8: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | import ManifoldCPP
   |        `- error: could not build C module 'ManifoldCPP'
 3 | import ManifoldBridge
 4 |
[25/25] 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:23:10: note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 21 | #endif
 22 |
 23 | #include "linalg.h"
    |          `- note: in file included from /host/spi-builder-workspace/External/manifold/include/manifold/common.h:23:
 24 | #include "optional_assert.h"
 25 |
/host/spi-builder-workspace/External/manifold/include/manifold/common.h:190:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
188 |    */
189 |   constexpr double Scale() const {
190 |     vec3 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
191 |     return la::max(absMax.x, la::max(absMax.y, absMax.z));
192 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:891: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
 889 | };
 890 | template <class T>
 891 | 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
 892 |   T x, y, z;
 893 |   constexpr vec() : x(), y(), z() {}
 894 |   constexpr vec(const T& x_, const T& y_, const T& z_) : x(x_), y(y_), z(z_) {}
 895 |   constexpr vec(const vec<T, 2>& xy, const T& z_) : vec(xy.x, xy.y, z_) {}
 896 |   constexpr explicit vec(const T& s) : vec(s, s, s) {}
     |                      `- note: explicit constructor is not a candidate
 897 |   constexpr explicit vec(const T* p) : vec(p[0], p[1], p[2]) {}
     |                      `- note: explicit constructor is not a candidate
 898 |   template <class U, int N>
 899 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 900 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y), static_cast<T>(v.z)) {
 901 |     static_assert(
     :
 915 |
 916 |   template <class U, class = detail::conv_t<vec, U>>
 917 |   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
 918 |   template <class U, class = detail::conv_t<U, vec>>
 919 |   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
 920 |     return converter<U, vec>{}(*this);
 921 |   }
<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:348:10: error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
346 |    */
347 |   constexpr double Scale() const {
348 |     vec2 absMax = la::max(la::abs(min), la::abs(max));
    |          `- error: no viable conversion from 'vec<ret_t<max, int, int>, [...]>' to 'vec<double, [...]>'
349 |     return la::max(absMax.x, absMax.y);
350 |   }
/host/spi-builder-workspace/External/manifold/include/manifold/linalg.h:867: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
 865 | };
 866 | template <class T>
 867 | 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
 868 |   T x, y;
 869 |   constexpr vec() : x(), y() {}
 870 |   constexpr vec(const T& x_, const T& y_) : x(x_), y(y_) {}
 871 |   constexpr explicit vec(const T& s) : vec(s, s) {}
     |                      `- note: explicit constructor is not a candidate
 872 |   constexpr explicit vec(const T* p) : vec(p[0], p[1]) {}
     |                      `- note: explicit constructor is not a candidate
 873 |   template <class U, int N>
 874 |   constexpr explicit vec(const vec<U, N>& v)
     |                      `- note: explicit constructor is not a candidate
 875 |       : vec(static_cast<T>(v.x), static_cast<T>(v.y)) {
 876 |     static_assert(
     :
 882 |
 883 |   template <class U, class = detail::conv_t<vec, U>>
 884 |   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
 885 |   template <class U, class = detail::conv_t<U, vec>>
 886 |   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
 887 |     return converter<U, vec>{}(*this);
 888 |   }
/host/spi-builder-workspace/Sources/Manifold3D/CrossSection/CrossSection+Operations.swift:2:8: error: could not build C module 'ManifoldCPP'
 1 | import Foundation
 2 | import ManifoldCPP
   |        `- error: could not build C module 'ManifoldCPP'
 3 | import ManifoldBridge
 4 |
BUILD FAILURE 6.1 android