clang++: error: no input files
/bin/sh: line 0: [: -lt: unary operator expected
In file included from bench.cpp:5:
./chess.hpp:1083:12: warning: inline variables are a C++17 extension [-Wc++17-extensions]
 1083 |     static inline Bitboard RookAttacks[0x19000]  = {};
      |            ^
./chess.hpp:1084:12: warning: inline variables are a C++17 extension [-Wc++17-extensions]
 1084 |     static inline Bitboard BishopAttacks[0x1480] = {};
      |            ^
./chess.hpp:1086:12: warning: inline variables are a C++17 extension [-Wc++17-extensions]
 1086 |     static inline Magic RookTable[64]   = {};
      |            ^
./chess.hpp:1087:12: warning: inline variables are a C++17 extension [-Wc++17-extensions]
 1087 |     static inline Magic BishopTable[64] = {};
      |            ^
./chess.hpp:1211:16: warning: nested namespace definition is a C++17 extension; define each namespace separately [-Wc++17-extensions]
 1211 | namespace chess::constants {
      |                ^~~~~~~~~~~
      |                 { namespace constants
 1212 | 
 1213 | constexpr Bitboard DEFAULT_CHECKMASK = Bitboard(0xFFFFFFFFFFFFFFFFull);
 1214 | constexpr auto STARTPOS              = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1";
 1215 | constexpr auto MAX_MOVES             = 256;
 1216 | }  // namespace chess::constants
      | } 
./chess.hpp:1670:61: warning: 'constexpr' on lambda expressions is a C++17 extension [-Wc++17-extensions]
 1670 |     static constexpr std::array<U64, 16> castlingKey = []() constexpr {
      |                                                             ^
./chess.hpp:1671:50: warning: 'constexpr' on lambda expressions is a C++17 extension [-Wc++17-extensions]
 1671 |         auto generateCastlingKey = [](int index) constexpr -> U64 {
      |                                                  ^
./chess.hpp:1671:14: error: variable of non-literal type '(lambda at ./chess.hpp:1671:36)' cannot be defined in a constexpr function before C++23
 1671 |         auto generateCastlingKey = [](int index) constexpr -> U64 {
      |              ^
./chess.hpp:1671:36: note: lambda closure types are non-literal types before C++17
 1671 |         auto generateCastlingKey = [](int index) constexpr -> U64 {
      |                                    ^
./chess.hpp:1726:13: error: no template named 'optional' in namespace 'std'
 1726 | inline std::optional<int> parseStringViewToInt(std::string_view sv) {
      |        ~~~~~^
./chess.hpp:1727:33: error: no member named 'nullopt' in namespace 'std'
 1727 |     if (sv.empty()) return std::nullopt;
      |                            ~~~~~^
./chess.hpp:1732:40: error: no member named 'nullopt' in namespace 'std'
 1732 |     if (parsed_sv.empty()) return std::nullopt;
      |                                   ~~~~~^
./chess.hpp:1739:10: warning: decomposition declarations are a C++17 extension [-Wc++17-extensions]
 1739 |     auto [ptr, ec] = std::from_chars(begin, end, result);
      |          ^~~~~~~~~
./chess.hpp:1739:27: error: no member named 'from_chars' in namespace 'std'
 1739 |     auto [ptr, ec] = std::from_chars(begin, end, result);
      |                      ~~~~~^
./chess.hpp:1758:17: error: no member named 'nullopt' in namespace 'std'
 1758 |     return std::nullopt;
      |            ~~~~~^
./chess.hpp:2322:69: error: no template named 'is_convertible_v' in namespace 'std'; did you mean 'is_convertible'?
 2322 |     template <typename... Pieces, typename = std::enable_if_t<(std::is_convertible_v<Pieces, PieceType> && ...)>>
      |                                                                ~~~~~^~~~~~~~~~~~~~~~
      |                                                                     is_convertible
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_convertible.h:22:29: note: 'is_convertible' declared here
   22 | struct _LIBCPP_TEMPLATE_VIS is_convertible : public integral_constant<bool, __is_convertible(_T1, _T2)> {};
      |                             ^
In file included from bench.cpp:5:
./chess.hpp:2322:108: error: expected ')'
 2322 |     template <typename... Pieces, typename = std::enable_if_t<(std::is_convertible_v<Pieces, PieceType> && ...)>>
      |                                                                                                            ^
./chess.hpp:2322:63: note: to match this '('
 2322 |     template <typename... Pieces, typename = std::enable_if_t<(std::is_convertible_v<Pieces, PieceType> && ...)>>
      |                                                               ^
./chess.hpp:2322:112: error: expected expression
 2322 |     template <typename... Pieces, typename = std::enable_if_t<(std::is_convertible_v<Pieces, PieceType> && ...)>>
      |                                                                                                                ^
./chess.hpp:3093:21: error: no member named 'optional' in namespace 'std'
 3093 |     std::array<std::optional<std::string_view>, N> static split_string_view(std::string_view fen,
      |                ~~~~~^
./chess.hpp:3093:46: error: expected '(' for function-style cast or type construction
 3093 |     std::array<std::optional<std::string_view>, N> static split_string_view(std::string_view fen,
      |                              ~~~~~~~~~~~~~~~~^
./chess.hpp:3093:47: error: expected member name or ';' after declaration specifiers
 3093 |     std::array<std::optional<std::string_view>, N> static split_string_view(std::string_view fen,
      |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
./chess.hpp:1881:13: warning: 'if' initialization statements are a C++17 extension [-Wc++17-extensions]
 1881 |         if (auto it = std::find(parts.begin(), parts.end(), "hmvc"); it != parts.end()) {
      |             ^
./chess.hpp:1891:13: warning: 'if' initialization statements are a C++17 extension [-Wc++17-extensions]
 1891 |         if (auto it = std::find(parts.begin(), parts.end(), "fmvn"); it != parts.end()) {
      |             ^
./chess.hpp:1929:21: warning: 'if' initialization statements are a C++17 extension [-Wc++17-extensions]
 1929 |                 if (Piece piece = at(Square(sq)); piece != Piece::NONE) {
      |                     ^
./chess.hpp:2070:24: warning: constexpr if is a C++17 extension [-Wc++17-extensions]
 2070 |                     if constexpr (EXACT) {
      |                        ^
./chess.hpp:2324:62: warning: pack fold expression is a C++17 extension [-Wc++17-extensions]
 2324 |         return (pieces_bb_[static_cast<PieceType>(pieces)] | ...);
      |                                                              ^
./chess.hpp:2337:12: warning: constexpr if is a C++17 extension [-Wc++17-extensions]
 2337 |         if constexpr (std::is_same_v<T, PieceType>) {
      |            ^
./chess.hpp:2337:28: error: no template named 'is_same_v' in namespace 'std'; did you mean 'is_same'?
 2337 |         if constexpr (std::is_same_v<T, PieceType>) {
      |                       ~~~~~^~~~~~~~~
      |                            is_same
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_same.h:22:29: note: 'is_same' declared here
   22 | struct _LIBCPP_TEMPLATE_VIS is_same : _BoolConstant<__is_same(_Tp, _Up)> {};
      |                             ^
In file included from bench.cpp:5:
./chess.hpp:2337:51: error: expected unqualified-id
 2337 |         if constexpr (std::is_same_v<T, PieceType>) {
      |                                                   ^
./chess.hpp:2366:14: error: use of undeclared identifier 'original_fen_'
 2366 |         if (!original_fen_.empty()) setFen(original_fen_);
      |              ^
./chess.hpp:2366:44: error: use of undeclared identifier 'original_fen_'
 2366 |         if (!original_fen_.empty()) setFen(original_fen_);
      |                                            ^
./chess.hpp:2522:46: error: no matching member function for call to 'pieces'
 2522 |         if (attacks::bishop(square, occ()) & pieces(PieceType::BISHOP, PieceType::QUEEN) & us(color)) return true;
      |                                              ^~~~~~
./chess.hpp:2311:28: note: candidate function not viable: no known conversion from 'const underlying' to 'Color' for 2nd argument
 2311 |     [[nodiscard]] Bitboard pieces(PieceType type, Color color) const noexcept {
      |                            ^                      ~~~~~~~~~~~
./chess.hpp:2323:28: note: candidate template ignored: couldn't infer template argument ''
 2323 |     [[nodiscard]] Bitboard pieces(Pieces... pieces) const noexcept {
      |                            ^
./chess.hpp:2320:28: note: candidate function not viable: requires single argument 'type', but 2 arguments were provided
 2320 |     [[nodiscard]] Bitboard pieces(PieceType type) const noexcept { return pieces_bb_[type]; }
      |                            ^      ~~~~~~~~~~~~~~
./chess.hpp:2523:44: error: no matching member function for call to 'pieces'
 2523 |         if (attacks::rook(square, occ()) & pieces(PieceType::ROOK, PieceType::QUEEN) & us(color)) return true;
      |                                            ^~~~~~
./chess.hpp:2311:28: note: candidate function not viable: no known conversion from 'const underlying' to 'Color' for 2nd argument
 2311 |     [[nodiscard]] Bitboard pieces(PieceType type, Color color) const noexcept {
      |                            ^                      ~~~~~~~~~~~
./chess.hpp:2323:28: note: candidate template ignored: couldn't infer template argument ''
 2323 |     [[nodiscard]] Bitboard pieces(Pieces... pieces) const noexcept {
      |                            ^
./chess.hpp:2320:28: note: candidate function not viable: requires single argument 'type', but 2 arguments were provided
 2320 |     [[nodiscard]] Bitboard pieces(PieceType type) const noexcept { return pieces_bb_[type]; }
      |                            ^      ~~~~~~~~~~~~~~
./chess.hpp:2542:34: error: no matching member function for call to 'pieces'
 2542 |         return bool(us(color) ^ (pieces(PieceType::PAWN, PieceType::KING) & us(color)));
      |                                  ^~~~~~
./chess.hpp:2311:28: note: candidate function not viable: no known conversion from 'const underlying' to 'Color' for 2nd argument
 2311 |     [[nodiscard]] Bitboard pieces(PieceType type, Color color) const noexcept {
      |                            ^                      ~~~~~~~~~~~
./chess.hpp:2323:28: note: candidate template ignored: couldn't infer template argument ''
 2323 |     [[nodiscard]] Bitboard pieces(Pieces... pieces) const noexcept {
      |                            ^
./chess.hpp:2320:28: note: candidate function not viable: requires single argument 'type', but 2 arguments were provided
 2320 |     [[nodiscard]] Bitboard pieces(PieceType type) const noexcept { return pieces_bb_[type]; }
      |                            ^      ~~~~~~~~~~~~~~
fatal error: too many errors emitted, stopping now [-ferror-limit=]
14 warnings and 20 errors generated.
In file included from defaults.cpp:1:
./defaults.hpp:9:1: warning: inline variables are a C++17 extension [-Wc++17-extensions]
    9 | inline std::vector<struct SearchParam*> all_params;
      | ^
./defaults.hpp:25:24: error: no member named 'clamp' in namespace 'std'
   25 |         current = std::clamp(value, min, max);
      |                   ~~~~~^
1 warning and 1 error generated.
In file included from eval.cpp:3:
./chess.hpp:1083:12: warning: inline variables are a C++17 extension [-Wc++17-extensions]
 1083 |     static inline Bitboard RookAttacks[0x19000]  = {};
      |            ^
./chess.hpp:1084:12: warning: inline variables are a C++17 extension [-Wc++17-extensions]
 1084 |     static inline Bitboard BishopAttacks[0x1480] = {};
      |            ^
./chess.hpp:1086:12: warning: inline variables are a C++17 extension [-Wc++17-extensions]
 1086 |     static inline Magic RookTable[64]   = {};
      |            ^
./chess.hpp:1087:12: warning: inline variables are a C++17 extension [-Wc++17-extensions]
 1087 |     static inline Magic BishopTable[64] = {};
      |            ^
./chess.hpp:1211:16: warning: nested namespace definition is a C++17 extension; define each namespace separately [-Wc++17-extensions]
 1211 | namespace chess::constants {
      |                ^~~~~~~~~~~
      |                 { namespace constants
 1212 | 
 1213 | constexpr Bitboard DEFAULT_CHECKMASK = Bitboard(0xFFFFFFFFFFFFFFFFull);
 1214 | constexpr auto STARTPOS              = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1";
 1215 | constexpr auto MAX_MOVES             = 256;
 1216 | }  // namespace chess::constants
      | } 
./chess.hpp:1670:61: warning: 'constexpr' on lambda expressions is a C++17 extension [-Wc++17-extensions]
 1670 |     static constexpr std::array<U64, 16> castlingKey = []() constexpr {
      |                                                             ^
./chess.hpp:1671:50: warning: 'constexpr' on lambda expressions is a C++17 extension [-Wc++17-extensions]
 1671 |         auto generateCastlingKey = [](int index) constexpr -> U64 {
      |                                                  ^
./chess.hpp:1671:14: error: variable of non-literal type '(lambda at ./chess.hpp:1671:36)' cannot be defined in a constexpr function before C++23
 1671 |         auto generateCastlingKey = [](int index) constexpr -> U64 {
      |              ^
./chess.hpp:1671:36: note: lambda closure types are non-literal types before C++17
 1671 |         auto generateCastlingKey = [](int index) constexpr -> U64 {
      |                                    ^
./chess.hpp:1726:13: error: no template named 'optional' in namespace 'std'
 1726 | inline std::optional<int> parseStringViewToInt(std::string_view sv) {
      |        ~~~~~^
./chess.hpp:1727:33: error: no member named 'nullopt' in namespace 'std'
 1727 |     if (sv.empty()) return std::nullopt;
      |                            ~~~~~^
./chess.hpp:1732:40: error: no member named 'nullopt' in namespace 'std'
 1732 |     if (parsed_sv.empty()) return std::nullopt;
      |                                   ~~~~~^
./chess.hpp:1739:10: warning: decomposition declarations are a C++17 extension [-Wc++17-extensions]
 1739 |     auto [ptr, ec] = std::from_chars(begin, end, result);
      |          ^~~~~~~~~
./chess.hpp:1739:27: error: no member named 'from_chars' in namespace 'std'
 1739 |     auto [ptr, ec] = std::from_chars(begin, end, result);
      |                      ~~~~~^
./chess.hpp:1758:17: error: no member named 'nullopt' in namespace 'std'
 1758 |     return std::nullopt;
      |            ~~~~~^
./chess.hpp:2322:69: error: no template named 'is_convertible_v' in namespace 'std'; did you mean 'is_convertible'?
 2322 |     template <typename... Pieces, typename = std::enable_if_t<(std::is_convertible_v<Pieces, PieceType> && ...)>>
      |                                                                ~~~~~^~~~~~~~~~~~~~~~
      |                                                                     is_convertible
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_convertible.h:22:29: note: 'is_convertible' declared here
   22 | struct _LIBCPP_TEMPLATE_VIS is_convertible : public integral_constant<bool, __is_convertible(_T1, _T2)> {};
      |                             ^
In file included from eval.cpp:3:
./chess.hpp:2322:108: error: expected ')'
 2322 |     template <typename... Pieces, typename = std::enable_if_t<(std::is_convertible_v<Pieces, PieceType> && ...)>>
      |                                                                                                            ^
./chess.hpp:2322:63: note: to match this '('
 2322 |     template <typename... Pieces, typename = std::enable_if_t<(std::is_convertible_v<Pieces, PieceType> && ...)>>
      |                                                               ^
./chess.hpp:2322:112: error: expected expression
 2322 |     template <typename... Pieces, typename = std::enable_if_t<(std::is_convertible_v<Pieces, PieceType> && ...)>>
      |                                                                                                                ^
./chess.hpp:3093:21: error: no member named 'optional' in namespace 'std'
 3093 |     std::array<std::optional<std::string_view>, N> static split_string_view(std::string_view fen,
      |                ~~~~~^
./chess.hpp:3093:46: error: expected '(' for function-style cast or type construction
 3093 |     std::array<std::optional<std::string_view>, N> static split_string_view(std::string_view fen,
      |                              ~~~~~~~~~~~~~~~~^
./chess.hpp:3093:47: error: expected member name or ';' after declaration specifiers
 3093 |     std::array<std::optional<std::string_view>, N> static split_string_view(std::string_view fen,
      |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
./chess.hpp:1881:13: warning: 'if' initialization statements are a C++17 extension [-Wc++17-extensions]
 1881 |         if (auto it = std::find(parts.begin(), parts.end(), "hmvc"); it != parts.end()) {
      |             ^
./chess.hpp:1891:13: warning: 'if' initialization statements are a C++17 extension [-Wc++17-extensions]
 1891 |         if (auto it = std::find(parts.begin(), parts.end(), "fmvn"); it != parts.end()) {
      |             ^
./chess.hpp:1929:21: warning: 'if' initialization statements are a C++17 extension [-Wc++17-extensions]
 1929 |                 if (Piece piece = at(Square(sq)); piece != Piece::NONE) {
      |                     ^
./chess.hpp:2070:24: warning: constexpr if is a C++17 extension [-Wc++17-extensions]
 2070 |                     if constexpr (EXACT) {
      |                        ^
./chess.hpp:2324:62: warning: pack fold expression is a C++17 extension [-Wc++17-extensions]
 2324 |         return (pieces_bb_[static_cast<PieceType>(pieces)] | ...);
      |                                                              ^
./chess.hpp:2337:12: warning: constexpr if is a C++17 extension [-Wc++17-extensions]
 2337 |         if constexpr (std::is_same_v<T, PieceType>) {
      |            ^
./chess.hpp:2337:28: error: no template named 'is_same_v' in namespace 'std'; did you mean 'is_same'?
 2337 |         if constexpr (std::is_same_v<T, PieceType>) {
      |                       ~~~~~^~~~~~~~~
      |                            is_same
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_same.h:22:29: note: 'is_same' declared here
   22 | struct _LIBCPP_TEMPLATE_VIS is_same : _BoolConstant<__is_same(_Tp, _Up)> {};
      |                             ^
In file included from eval.cpp:3:
./chess.hpp:2337:51: error: expected unqualified-id
 2337 |         if constexpr (std::is_same_v<T, PieceType>) {
      |                                                   ^
./chess.hpp:2366:14: error: use of undeclared identifier 'original_fen_'
 2366 |         if (!original_fen_.empty()) setFen(original_fen_);
      |              ^
./chess.hpp:2366:44: error: use of undeclared identifier 'original_fen_'
 2366 |         if (!original_fen_.empty()) setFen(original_fen_);
      |                                            ^
./chess.hpp:2522:46: error: no matching member function for call to 'pieces'
 2522 |         if (attacks::bishop(square, occ()) & pieces(PieceType::BISHOP, PieceType::QUEEN) & us(color)) return true;
      |                                              ^~~~~~
./chess.hpp:2311:28: note: candidate function not viable: no known conversion from 'const underlying' to 'Color' for 2nd argument
 2311 |     [[nodiscard]] Bitboard pieces(PieceType type, Color color) const noexcept {
      |                            ^                      ~~~~~~~~~~~
./chess.hpp:2323:28: note: candidate template ignored: couldn't infer template argument ''
 2323 |     [[nodiscard]] Bitboard pieces(Pieces... pieces) const noexcept {
      |                            ^
./chess.hpp:2320:28: note: candidate function not viable: requires single argument 'type', but 2 arguments were provided
 2320 |     [[nodiscard]] Bitboard pieces(PieceType type) const noexcept { return pieces_bb_[type]; }
      |                            ^      ~~~~~~~~~~~~~~
./chess.hpp:2523:44: error: no matching member function for call to 'pieces'
 2523 |         if (attacks::rook(square, occ()) & pieces(PieceType::ROOK, PieceType::QUEEN) & us(color)) return true;
      |                                            ^~~~~~
./chess.hpp:2311:28: note: candidate function not viable: no known conversion from 'const underlying' to 'Color' for 2nd argument
 2311 |     [[nodiscard]] Bitboard pieces(PieceType type, Color color) const noexcept {
      |                            ^                      ~~~~~~~~~~~
./chess.hpp:2323:28: note: candidate template ignored: couldn't infer template argument ''
 2323 |     [[nodiscard]] Bitboard pieces(Pieces... pieces) const noexcept {
      |                            ^
./chess.hpp:2320:28: note: candidate function not viable: requires single argument 'type', but 2 arguments were provided
 2320 |     [[nodiscard]] Bitboard pieces(PieceType type) const noexcept { return pieces_bb_[type]; }
      |                            ^      ~~~~~~~~~~~~~~
./chess.hpp:2542:34: error: no matching member function for call to 'pieces'
 2542 |         return bool(us(color) ^ (pieces(PieceType::PAWN, PieceType::KING) & us(color)));
      |                                  ^~~~~~
./chess.hpp:2311:28: note: candidate function not viable: no known conversion from 'const underlying' to 'Color' for 2nd argument
 2311 |     [[nodiscard]] Bitboard pieces(PieceType type, Color color) const noexcept {
      |                            ^                      ~~~~~~~~~~~
./chess.hpp:2323:28: note: candidate template ignored: couldn't infer template argument ''
 2323 |     [[nodiscard]] Bitboard pieces(Pieces... pieces) const noexcept {
      |                            ^
./chess.hpp:2320:28: note: candidate function not viable: requires single argument 'type', but 2 arguments were provided
 2320 |     [[nodiscard]] Bitboard pieces(PieceType type) const noexcept { return pieces_bb_[type]; }
      |                            ^      ~~~~~~~~~~~~~~
fatal error: too many errors emitted, stopping now [-ferror-limit=]
14 warnings and 20 errors generated.
In file included from search.cpp:7:
./chess.hpp:1083:12: warning: inline variables are a C++17 extension [-Wc++17-extensions]
 1083 |     static inline Bitboard RookAttacks[0x19000]  = {};
      |            ^
./chess.hpp:1084:12: warning: inline variables are a C++17 extension [-Wc++17-extensions]
 1084 |     static inline Bitboard BishopAttacks[0x1480] = {};
      |            ^
./chess.hpp:1086:12: warning: inline variables are a C++17 extension [-Wc++17-extensions]
 1086 |     static inline Magic RookTable[64]   = {};
      |            ^
./chess.hpp:1087:12: warning: inline variables are a C++17 extension [-Wc++17-extensions]
 1087 |     static inline Magic BishopTable[64] = {};
      |            ^
./chess.hpp:1211:16: warning: nested namespace definition is a C++17 extension; define each namespace separately [-Wc++17-extensions]
 1211 | namespace chess::constants {
      |                ^~~~~~~~~~~
      |                 { namespace constants
 1212 | 
 1213 | constexpr Bitboard DEFAULT_CHECKMASK = Bitboard(0xFFFFFFFFFFFFFFFFull);
 1214 | constexpr auto STARTPOS              = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1";
 1215 | constexpr auto MAX_MOVES             = 256;
 1216 | }  // namespace chess::constants
      | } 
./chess.hpp:1670:61: warning: 'constexpr' on lambda expressions is a C++17 extension [-Wc++17-extensions]
 1670 |     static constexpr std::array<U64, 16> castlingKey = []() constexpr {
      |                                                             ^
./chess.hpp:1671:50: warning: 'constexpr' on lambda expressions is a C++17 extension [-Wc++17-extensions]
 1671 |         auto generateCastlingKey = [](int index) constexpr -> U64 {
      |                                                  ^
./chess.hpp:1671:14: error: variable of non-literal type '(lambda at ./chess.hpp:1671:36)' cannot be defined in a constexpr function before C++23
 1671 |         auto generateCastlingKey = [](int index) constexpr -> U64 {
      |              ^
./chess.hpp:1671:36: note: lambda closure types are non-literal types before C++17
 1671 |         auto generateCastlingKey = [](int index) constexpr -> U64 {
      |                                    ^
./chess.hpp:1726:13: error: no template named 'optional' in namespace 'std'
 1726 | inline std::optional<int> parseStringViewToInt(std::string_view sv) {
      |        ~~~~~^
./chess.hpp:1727:33: error: no member named 'nullopt' in namespace 'std'
 1727 |     if (sv.empty()) return std::nullopt;
      |                            ~~~~~^
./chess.hpp:1732:40: error: no member named 'nullopt' in namespace 'std'
 1732 |     if (parsed_sv.empty()) return std::nullopt;
      |                                   ~~~~~^
./chess.hpp:1739:10: warning: decomposition declarations are a C++17 extension [-Wc++17-extensions]
 1739 |     auto [ptr, ec] = std::from_chars(begin, end, result);
      |          ^~~~~~~~~
./chess.hpp:1739:27: error: no member named 'from_chars' in namespace 'std'
 1739 |     auto [ptr, ec] = std::from_chars(begin, end, result);
      |                      ~~~~~^
./chess.hpp:1758:17: error: no member named 'nullopt' in namespace 'std'
 1758 |     return std::nullopt;
      |            ~~~~~^
./chess.hpp:2322:69: error: no template named 'is_convertible_v' in namespace 'std'; did you mean 'is_convertible'?
 2322 |     template <typename... Pieces, typename = std::enable_if_t<(std::is_convertible_v<Pieces, PieceType> && ...)>>
      |                                                                ~~~~~^~~~~~~~~~~~~~~~
      |                                                                     is_convertible
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_convertible.h:22:29: note: 'is_convertible' declared here
   22 | struct _LIBCPP_TEMPLATE_VIS is_convertible : public integral_constant<bool, __is_convertible(_T1, _T2)> {};
      |                             ^
In file included from search.cpp:7:
./chess.hpp:2322:108: error: expected ')'
 2322 |     template <typename... Pieces, typename = std::enable_if_t<(std::is_convertible_v<Pieces, PieceType> && ...)>>
      |                                                                                                            ^
./chess.hpp:2322:63: note: to match this '('
 2322 |     template <typename... Pieces, typename = std::enable_if_t<(std::is_convertible_v<Pieces, PieceType> && ...)>>
      |                                                               ^
./chess.hpp:2322:112: error: expected expression
 2322 |     template <typename... Pieces, typename = std::enable_if_t<(std::is_convertible_v<Pieces, PieceType> && ...)>>
      |                                                                                                                ^
./chess.hpp:3093:21: error: no member named 'optional' in namespace 'std'
 3093 |     std::array<std::optional<std::string_view>, N> static split_string_view(std::string_view fen,
      |                ~~~~~^
./chess.hpp:3093:46: error: expected '(' for function-style cast or type construction
 3093 |     std::array<std::optional<std::string_view>, N> static split_string_view(std::string_view fen,
      |                              ~~~~~~~~~~~~~~~~^
./chess.hpp:3093:47: error: expected member name or ';' after declaration specifiers
 3093 |     std::array<std::optional<std::string_view>, N> static split_string_view(std::string_view fen,
      |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
./chess.hpp:1881:13: warning: 'if' initialization statements are a C++17 extension [-Wc++17-extensions]
 1881 |         if (auto it = std::find(parts.begin(), parts.end(), "hmvc"); it != parts.end()) {
      |             ^
./chess.hpp:1891:13: warning: 'if' initialization statements are a C++17 extension [-Wc++17-extensions]
 1891 |         if (auto it = std::find(parts.begin(), parts.end(), "fmvn"); it != parts.end()) {
      |             ^
./chess.hpp:1929:21: warning: 'if' initialization statements are a C++17 extension [-Wc++17-extensions]
 1929 |                 if (Piece piece = at(Square(sq)); piece != Piece::NONE) {
      |                     ^
./chess.hpp:2070:24: warning: constexpr if is a C++17 extension [-Wc++17-extensions]
 2070 |                     if constexpr (EXACT) {
      |                        ^
./chess.hpp:2324:62: warning: pack fold expression is a C++17 extension [-Wc++17-extensions]
 2324 |         return (pieces_bb_[static_cast<PieceType>(pieces)] | ...);
      |                                                              ^
./chess.hpp:2337:12: warning: constexpr if is a C++17 extension [-Wc++17-extensions]
 2337 |         if constexpr (std::is_same_v<T, PieceType>) {
      |            ^
./chess.hpp:2337:28: error: no template named 'is_same_v' in namespace 'std'; did you mean 'is_same'?
 2337 |         if constexpr (std::is_same_v<T, PieceType>) {
      |                       ~~~~~^~~~~~~~~
      |                            is_same
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_same.h:22:29: note: 'is_same' declared here
   22 | struct _LIBCPP_TEMPLATE_VIS is_same : _BoolConstant<__is_same(_Tp, _Up)> {};
      |                             ^
In file included from search.cpp:7:
./chess.hpp:2337:51: error: expected unqualified-id
 2337 |         if constexpr (std::is_same_v<T, PieceType>) {
      |                                                   ^
./chess.hpp:2366:14: error: use of undeclared identifier 'original_fen_'
 2366 |         if (!original_fen_.empty()) setFen(original_fen_);
      |              ^
./chess.hpp:2366:44: error: use of undeclared identifier 'original_fen_'
 2366 |         if (!original_fen_.empty()) setFen(original_fen_);
      |                                            ^
./chess.hpp:2522:46: error: no matching member function for call to 'pieces'
 2522 |         if (attacks::bishop(square, occ()) & pieces(PieceType::BISHOP, PieceType::QUEEN) & us(color)) return true;
      |                                              ^~~~~~
./chess.hpp:2311:28: note: candidate function not viable: no known conversion from 'const underlying' to 'Color' for 2nd argument
 2311 |     [[nodiscard]] Bitboard pieces(PieceType type, Color color) const noexcept {
      |                            ^                      ~~~~~~~~~~~
./chess.hpp:2323:28: note: candidate template ignored: couldn't infer template argument ''
 2323 |     [[nodiscard]] Bitboard pieces(Pieces... pieces) const noexcept {
      |                            ^
./chess.hpp:2320:28: note: candidate function not viable: requires single argument 'type', but 2 arguments were provided
 2320 |     [[nodiscard]] Bitboard pieces(PieceType type) const noexcept { return pieces_bb_[type]; }
      |                            ^      ~~~~~~~~~~~~~~
./chess.hpp:2523:44: error: no matching member function for call to 'pieces'
 2523 |         if (attacks::rook(square, occ()) & pieces(PieceType::ROOK, PieceType::QUEEN) & us(color)) return true;
      |                                            ^~~~~~
./chess.hpp:2311:28: note: candidate function not viable: no known conversion from 'const underlying' to 'Color' for 2nd argument
 2311 |     [[nodiscard]] Bitboard pieces(PieceType type, Color color) const noexcept {
      |                            ^                      ~~~~~~~~~~~
./chess.hpp:2323:28: note: candidate template ignored: couldn't infer template argument ''
 2323 |     [[nodiscard]] Bitboard pieces(Pieces... pieces) const noexcept {
      |                            ^
./chess.hpp:2320:28: note: candidate function not viable: requires single argument 'type', but 2 arguments were provided
 2320 |     [[nodiscard]] Bitboard pieces(PieceType type) const noexcept { return pieces_bb_[type]; }
      |                            ^      ~~~~~~~~~~~~~~
./chess.hpp:2542:34: error: no matching member function for call to 'pieces'
 2542 |         return bool(us(color) ^ (pieces(PieceType::PAWN, PieceType::KING) & us(color)));
      |                                  ^~~~~~
./chess.hpp:2311:28: note: candidate function not viable: no known conversion from 'const underlying' to 'Color' for 2nd argument
 2311 |     [[nodiscard]] Bitboard pieces(PieceType type, Color color) const noexcept {
      |                            ^                      ~~~~~~~~~~~
./chess.hpp:2323:28: note: candidate template ignored: couldn't infer template argument ''
 2323 |     [[nodiscard]] Bitboard pieces(Pieces... pieces) const noexcept {
      |                            ^
./chess.hpp:2320:28: note: candidate function not viable: requires single argument 'type', but 2 arguments were provided
 2320 |     [[nodiscard]] Bitboard pieces(PieceType type) const noexcept { return pieces_bb_[type]; }
      |                            ^      ~~~~~~~~~~~~~~
fatal error: too many errors emitted, stopping now [-ferror-limit=]
14 warnings and 20 errors generated.
In file included from see.cpp:1:
./chess.hpp:1083:12: warning: inline variables are a C++17 extension [-Wc++17-extensions]
 1083 |     static inline Bitboard RookAttacks[0x19000]  = {};
      |            ^
./chess.hpp:1084:12: warning: inline variables are a C++17 extension [-Wc++17-extensions]
 1084 |     static inline Bitboard BishopAttacks[0x1480] = {};
      |            ^
./chess.hpp:1086:12: warning: inline variables are a C++17 extension [-Wc++17-extensions]
 1086 |     static inline Magic RookTable[64]   = {};
      |            ^
./chess.hpp:1087:12: warning: inline variables are a C++17 extension [-Wc++17-extensions]
 1087 |     static inline Magic BishopTable[64] = {};
      |            ^
./chess.hpp:1211:16: warning: nested namespace definition is a C++17 extension; define each namespace separately [-Wc++17-extensions]
 1211 | namespace chess::constants {
      |                ^~~~~~~~~~~
      |                 { namespace constants
 1212 | 
 1213 | constexpr Bitboard DEFAULT_CHECKMASK = Bitboard(0xFFFFFFFFFFFFFFFFull);
 1214 | constexpr auto STARTPOS              = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1";
 1215 | constexpr auto MAX_MOVES             = 256;
 1216 | }  // namespace chess::constants
      | } 
./chess.hpp:1670:61: warning: 'constexpr' on lambda expressions is a C++17 extension [-Wc++17-extensions]
 1670 |     static constexpr std::array<U64, 16> castlingKey = []() constexpr {
      |                                                             ^
./chess.hpp:1671:50: warning: 'constexpr' on lambda expressions is a C++17 extension [-Wc++17-extensions]
 1671 |         auto generateCastlingKey = [](int index) constexpr -> U64 {
      |                                                  ^
./chess.hpp:1671:14: error: variable of non-literal type '(lambda at ./chess.hpp:1671:36)' cannot be defined in a constexpr function before C++23
 1671 |         auto generateCastlingKey = [](int index) constexpr -> U64 {
      |              ^
./chess.hpp:1671:36: note: lambda closure types are non-literal types before C++17
 1671 |         auto generateCastlingKey = [](int index) constexpr -> U64 {
      |                                    ^
./chess.hpp:1726:13: error: no template named 'optional' in namespace 'std'
 1726 | inline std::optional<int> parseStringViewToInt(std::string_view sv) {
      |        ~~~~~^
./chess.hpp:1727:33: error: no member named 'nullopt' in namespace 'std'
 1727 |     if (sv.empty()) return std::nullopt;
      |                            ~~~~~^
./chess.hpp:1732:40: error: no member named 'nullopt' in namespace 'std'
 1732 |     if (parsed_sv.empty()) return std::nullopt;
      |                                   ~~~~~^
./chess.hpp:1739:10: warning: decomposition declarations are a C++17 extension [-Wc++17-extensions]
 1739 |     auto [ptr, ec] = std::from_chars(begin, end, result);
      |          ^~~~~~~~~
./chess.hpp:1739:27: error: no member named 'from_chars' in namespace 'std'
 1739 |     auto [ptr, ec] = std::from_chars(begin, end, result);
      |                      ~~~~~^
./chess.hpp:1758:17: error: no member named 'nullopt' in namespace 'std'
 1758 |     return std::nullopt;
      |            ~~~~~^
./chess.hpp:2322:69: error: no template named 'is_convertible_v' in namespace 'std'; did you mean 'is_convertible'?
 2322 |     template <typename... Pieces, typename = std::enable_if_t<(std::is_convertible_v<Pieces, PieceType> && ...)>>
      |                                                                ~~~~~^~~~~~~~~~~~~~~~
      |                                                                     is_convertible
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_convertible.h:22:29: note: 'is_convertible' declared here
   22 | struct _LIBCPP_TEMPLATE_VIS is_convertible : public integral_constant<bool, __is_convertible(_T1, _T2)> {};
      |                             ^
In file included from see.cpp:1:
./chess.hpp:2322:108: error: expected ')'
 2322 |     template <typename... Pieces, typename = std::enable_if_t<(std::is_convertible_v<Pieces, PieceType> && ...)>>
      |                                                                                                            ^
./chess.hpp:2322:63: note: to match this '('
 2322 |     template <typename... Pieces, typename = std::enable_if_t<(std::is_convertible_v<Pieces, PieceType> && ...)>>
      |                                                               ^
./chess.hpp:2322:112: error: expected expression
 2322 |     template <typename... Pieces, typename = std::enable_if_t<(std::is_convertible_v<Pieces, PieceType> && ...)>>
      |                                                                                                                ^
./chess.hpp:3093:21: error: no member named 'optional' in namespace 'std'
 3093 |     std::array<std::optional<std::string_view>, N> static split_string_view(std::string_view fen,
      |                ~~~~~^
./chess.hpp:3093:46: error: expected '(' for function-style cast or type construction
 3093 |     std::array<std::optional<std::string_view>, N> static split_string_view(std::string_view fen,
      |                              ~~~~~~~~~~~~~~~~^
./chess.hpp:3093:47: error: expected member name or ';' after declaration specifiers
 3093 |     std::array<std::optional<std::string_view>, N> static split_string_view(std::string_view fen,
      |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
./chess.hpp:1881:13: warning: 'if' initialization statements are a C++17 extension [-Wc++17-extensions]
 1881 |         if (auto it = std::find(parts.begin(), parts.end(), "hmvc"); it != parts.end()) {
      |             ^
./chess.hpp:1891:13: warning: 'if' initialization statements are a C++17 extension [-Wc++17-extensions]
 1891 |         if (auto it = std::find(parts.begin(), parts.end(), "fmvn"); it != parts.end()) {
      |             ^
./chess.hpp:1929:21: warning: 'if' initialization statements are a C++17 extension [-Wc++17-extensions]
 1929 |                 if (Piece piece = at(Square(sq)); piece != Piece::NONE) {
      |                     ^
./chess.hpp:2070:24: warning: constexpr if is a C++17 extension [-Wc++17-extensions]
 2070 |                     if constexpr (EXACT) {
      |                        ^
./chess.hpp:2324:62: warning: pack fold expression is a C++17 extension [-Wc++17-extensions]
 2324 |         return (pieces_bb_[static_cast<PieceType>(pieces)] | ...);
      |                                                              ^
./chess.hpp:2337:12: warning: constexpr if is a C++17 extension [-Wc++17-extensions]
 2337 |         if constexpr (std::is_same_v<T, PieceType>) {
      |            ^
./chess.hpp:2337:28: error: no template named 'is_same_v' in namespace 'std'; did you mean 'is_same'?
 2337 |         if constexpr (std::is_same_v<T, PieceType>) {
      |                       ~~~~~^~~~~~~~~
      |                            is_same
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_same.h:22:29: note: 'is_same' declared here
   22 | struct _LIBCPP_TEMPLATE_VIS is_same : _BoolConstant<__is_same(_Tp, _Up)> {};
      |                             ^
In file included from see.cpp:1:
./chess.hpp:2337:51: error: expected unqualified-id
 2337 |         if constexpr (std::is_same_v<T, PieceType>) {
      |                                                   ^
./chess.hpp:2366:14: error: use of undeclared identifier 'original_fen_'
 2366 |         if (!original_fen_.empty()) setFen(original_fen_);
      |              ^
./chess.hpp:2366:44: error: use of undeclared identifier 'original_fen_'
 2366 |         if (!original_fen_.empty()) setFen(original_fen_);
      |                                            ^
./chess.hpp:2522:46: error: no matching member function for call to 'pieces'
 2522 |         if (attacks::bishop(square, occ()) & pieces(PieceType::BISHOP, PieceType::QUEEN) & us(color)) return true;
      |                                              ^~~~~~
./chess.hpp:2311:28: note: candidate function not viable: no known conversion from 'const underlying' to 'Color' for 2nd argument
 2311 |     [[nodiscard]] Bitboard pieces(PieceType type, Color color) const noexcept {
      |                            ^                      ~~~~~~~~~~~
./chess.hpp:2323:28: note: candidate template ignored: couldn't infer template argument ''
 2323 |     [[nodiscard]] Bitboard pieces(Pieces... pieces) const noexcept {
      |                            ^
./chess.hpp:2320:28: note: candidate function not viable: requires single argument 'type', but 2 arguments were provided
 2320 |     [[nodiscard]] Bitboard pieces(PieceType type) const noexcept { return pieces_bb_[type]; }
      |                            ^      ~~~~~~~~~~~~~~
./chess.hpp:2523:44: error: no matching member function for call to 'pieces'
 2523 |         if (attacks::rook(square, occ()) & pieces(PieceType::ROOK, PieceType::QUEEN) & us(color)) return true;
      |                                            ^~~~~~
./chess.hpp:2311:28: note: candidate function not viable: no known conversion from 'const underlying' to 'Color' for 2nd argument
 2311 |     [[nodiscard]] Bitboard pieces(PieceType type, Color color) const noexcept {
      |                            ^                      ~~~~~~~~~~~
./chess.hpp:2323:28: note: candidate template ignored: couldn't infer template argument ''
 2323 |     [[nodiscard]] Bitboard pieces(Pieces... pieces) const noexcept {
      |                            ^
./chess.hpp:2320:28: note: candidate function not viable: requires single argument 'type', but 2 arguments were provided
 2320 |     [[nodiscard]] Bitboard pieces(PieceType type) const noexcept { return pieces_bb_[type]; }
      |                            ^      ~~~~~~~~~~~~~~
./chess.hpp:2542:34: error: no matching member function for call to 'pieces'
 2542 |         return bool(us(color) ^ (pieces(PieceType::PAWN, PieceType::KING) & us(color)));
      |                                  ^~~~~~
./chess.hpp:2311:28: note: candidate function not viable: no known conversion from 'const underlying' to 'Color' for 2nd argument
 2311 |     [[nodiscard]] Bitboard pieces(PieceType type, Color color) const noexcept {
      |                            ^                      ~~~~~~~~~~~
./chess.hpp:2323:28: note: candidate template ignored: couldn't infer template argument ''
 2323 |     [[nodiscard]] Bitboard pieces(Pieces... pieces) const noexcept {
      |                            ^
./chess.hpp:2320:28: note: candidate function not viable: requires single argument 'type', but 2 arguments were provided
 2320 |     [[nodiscard]] Bitboard pieces(PieceType type) const noexcept { return pieces_bb_[type]; }
      |                            ^      ~~~~~~~~~~~~~~
fatal error: too many errors emitted, stopping now [-ferror-limit=]
14 warnings and 20 errors generated.
In file included from transposition.cpp:1:
In file included from ./transposition.hpp:6:
./chess.hpp:1083:12: warning: inline variables are a C++17 extension [-Wc++17-extensions]
 1083 |     static inline Bitboard RookAttacks[0x19000]  = {};
      |            ^
./chess.hpp:1084:12: warning: inline variables are a C++17 extension [-Wc++17-extensions]
 1084 |     static inline Bitboard BishopAttacks[0x1480] = {};
      |            ^
./chess.hpp:1086:12: warning: inline variables are a C++17 extension [-Wc++17-extensions]
 1086 |     static inline Magic RookTable[64]   = {};
      |            ^
./chess.hpp:1087:12: warning: inline variables are a C++17 extension [-Wc++17-extensions]
 1087 |     static inline Magic BishopTable[64] = {};
      |            ^
./chess.hpp:1211:16: warning: nested namespace definition is a C++17 extension; define each namespace separately [-Wc++17-extensions]
 1211 | namespace chess::constants {
      |                ^~~~~~~~~~~
      |                 { namespace constants
 1212 | 
 1213 | constexpr Bitboard DEFAULT_CHECKMASK = Bitboard(0xFFFFFFFFFFFFFFFFull);
 1214 | constexpr auto STARTPOS              = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1";
 1215 | constexpr auto MAX_MOVES             = 256;
 1216 | }  // namespace chess::constants
      | } 
./chess.hpp:1670:61: warning: 'constexpr' on lambda expressions is a C++17 extension [-Wc++17-extensions]
 1670 |     static constexpr std::array<U64, 16> castlingKey = []() constexpr {
      |                                                             ^
./chess.hpp:1671:50: warning: 'constexpr' on lambda expressions is a C++17 extension [-Wc++17-extensions]
 1671 |         auto generateCastlingKey = [](int index) constexpr -> U64 {
      |                                                  ^
./chess.hpp:1671:14: error: variable of non-literal type '(lambda at ./chess.hpp:1671:36)' cannot be defined in a constexpr function before C++23
 1671 |         auto generateCastlingKey = [](int index) constexpr -> U64 {
      |              ^
./chess.hpp:1671:36: note: lambda closure types are non-literal types before C++17
 1671 |         auto generateCastlingKey = [](int index) constexpr -> U64 {
      |                                    ^
./chess.hpp:1726:13: error: no template named 'optional' in namespace 'std'
 1726 | inline std::optional<int> parseStringViewToInt(std::string_view sv) {
      |        ~~~~~^
./chess.hpp:1727:33: error: no member named 'nullopt' in namespace 'std'
 1727 |     if (sv.empty()) return std::nullopt;
      |                            ~~~~~^
./chess.hpp:1732:40: error: no member named 'nullopt' in namespace 'std'
 1732 |     if (parsed_sv.empty()) return std::nullopt;
      |                                   ~~~~~^
./chess.hpp:1739:10: warning: decomposition declarations are a C++17 extension [-Wc++17-extensions]
 1739 |     auto [ptr, ec] = std::from_chars(begin, end, result);
      |          ^~~~~~~~~
./chess.hpp:1739:27: error: no member named 'from_chars' in namespace 'std'
 1739 |     auto [ptr, ec] = std::from_chars(begin, end, result);
      |                      ~~~~~^
./chess.hpp:1758:17: error: no member named 'nullopt' in namespace 'std'
 1758 |     return std::nullopt;
      |            ~~~~~^
./chess.hpp:2322:69: error: no template named 'is_convertible_v' in namespace 'std'; did you mean 'is_convertible'?
 2322 |     template <typename... Pieces, typename = std::enable_if_t<(std::is_convertible_v<Pieces, PieceType> && ...)>>
      |                                                                ~~~~~^~~~~~~~~~~~~~~~
      |                                                                     is_convertible
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_convertible.h:22:29: note: 'is_convertible' declared here
   22 | struct _LIBCPP_TEMPLATE_VIS is_convertible : public integral_constant<bool, __is_convertible(_T1, _T2)> {};
      |                             ^
In file included from transposition.cpp:1:
In file included from ./transposition.hpp:6:
./chess.hpp:2322:108: error: expected ')'
 2322 |     template <typename... Pieces, typename = std::enable_if_t<(std::is_convertible_v<Pieces, PieceType> && ...)>>
      |                                                                                                            ^
./chess.hpp:2322:63: note: to match this '('
 2322 |     template <typename... Pieces, typename = std::enable_if_t<(std::is_convertible_v<Pieces, PieceType> && ...)>>
      |                                                               ^
./chess.hpp:2322:112: error: expected expression
 2322 |     template <typename... Pieces, typename = std::enable_if_t<(std::is_convertible_v<Pieces, PieceType> && ...)>>
      |                                                                                                                ^
./chess.hpp:3093:21: error: no member named 'optional' in namespace 'std'
 3093 |     std::array<std::optional<std::string_view>, N> static split_string_view(std::string_view fen,
      |                ~~~~~^
./chess.hpp:3093:46: error: expected '(' for function-style cast or type construction
 3093 |     std::array<std::optional<std::string_view>, N> static split_string_view(std::string_view fen,
      |                              ~~~~~~~~~~~~~~~~^
./chess.hpp:3093:47: error: expected member name or ';' after declaration specifiers
 3093 |     std::array<std::optional<std::string_view>, N> static split_string_view(std::string_view fen,
      |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
./chess.hpp:1881:13: warning: 'if' initialization statements are a C++17 extension [-Wc++17-extensions]
 1881 |         if (auto it = std::find(parts.begin(), parts.end(), "hmvc"); it != parts.end()) {
      |             ^
./chess.hpp:1891:13: warning: 'if' initialization statements are a C++17 extension [-Wc++17-extensions]
 1891 |         if (auto it = std::find(parts.begin(), parts.end(), "fmvn"); it != parts.end()) {
      |             ^
./chess.hpp:1929:21: warning: 'if' initialization statements are a C++17 extension [-Wc++17-extensions]
 1929 |                 if (Piece piece = at(Square(sq)); piece != Piece::NONE) {
      |                     ^
./chess.hpp:2070:24: warning: constexpr if is a C++17 extension [-Wc++17-extensions]
 2070 |                     if constexpr (EXACT) {
      |                        ^
./chess.hpp:2324:62: warning: pack fold expression is a C++17 extension [-Wc++17-extensions]
 2324 |         return (pieces_bb_[static_cast<PieceType>(pieces)] | ...);
      |                                                              ^
./chess.hpp:2337:12: warning: constexpr if is a C++17 extension [-Wc++17-extensions]
 2337 |         if constexpr (std::is_same_v<T, PieceType>) {
      |            ^
./chess.hpp:2337:28: error: no template named 'is_same_v' in namespace 'std'; did you mean 'is_same'?
 2337 |         if constexpr (std::is_same_v<T, PieceType>) {
      |                       ~~~~~^~~~~~~~~
      |                            is_same
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_same.h:22:29: note: 'is_same' declared here
   22 | struct _LIBCPP_TEMPLATE_VIS is_same : _BoolConstant<__is_same(_Tp, _Up)> {};
      |                             ^
In file included from transposition.cpp:1:
In file included from ./transposition.hpp:6:
./chess.hpp:2337:51: error: expected unqualified-id
 2337 |         if constexpr (std::is_same_v<T, PieceType>) {
      |                                                   ^
./chess.hpp:2366:14: error: use of undeclared identifier 'original_fen_'
 2366 |         if (!original_fen_.empty()) setFen(original_fen_);
      |              ^
./chess.hpp:2366:44: error: use of undeclared identifier 'original_fen_'
 2366 |         if (!original_fen_.empty()) setFen(original_fen_);
      |                                            ^
./chess.hpp:2522:46: error: no matching member function for call to 'pieces'
 2522 |         if (attacks::bishop(square, occ()) & pieces(PieceType::BISHOP, PieceType::QUEEN) & us(color)) return true;
      |                                              ^~~~~~
./chess.hpp:2311:28: note: candidate function not viable: no known conversion from 'const underlying' to 'Color' for 2nd argument
 2311 |     [[nodiscard]] Bitboard pieces(PieceType type, Color color) const noexcept {
      |                            ^                      ~~~~~~~~~~~
./chess.hpp:2323:28: note: candidate template ignored: couldn't infer template argument ''
 2323 |     [[nodiscard]] Bitboard pieces(Pieces... pieces) const noexcept {
      |                            ^
./chess.hpp:2320:28: note: candidate function not viable: requires single argument 'type', but 2 arguments were provided
 2320 |     [[nodiscard]] Bitboard pieces(PieceType type) const noexcept { return pieces_bb_[type]; }
      |                            ^      ~~~~~~~~~~~~~~
./chess.hpp:2523:44: error: no matching member function for call to 'pieces'
 2523 |         if (attacks::rook(square, occ()) & pieces(PieceType::ROOK, PieceType::QUEEN) & us(color)) return true;
      |                                            ^~~~~~
./chess.hpp:2311:28: note: candidate function not viable: no known conversion from 'const underlying' to 'Color' for 2nd argument
 2311 |     [[nodiscard]] Bitboard pieces(PieceType type, Color color) const noexcept {
      |                            ^                      ~~~~~~~~~~~
./chess.hpp:2323:28: note: candidate template ignored: couldn't infer template argument ''
 2323 |     [[nodiscard]] Bitboard pieces(Pieces... pieces) const noexcept {
      |                            ^
./chess.hpp:2320:28: note: candidate function not viable: requires single argument 'type', but 2 arguments were provided
 2320 |     [[nodiscard]] Bitboard pieces(PieceType type) const noexcept { return pieces_bb_[type]; }
      |                            ^      ~~~~~~~~~~~~~~
./chess.hpp:2542:34: error: no matching member function for call to 'pieces'
 2542 |         return bool(us(color) ^ (pieces(PieceType::PAWN, PieceType::KING) & us(color)));
      |                                  ^~~~~~
./chess.hpp:2311:28: note: candidate function not viable: no known conversion from 'const underlying' to 'Color' for 2nd argument
 2311 |     [[nodiscard]] Bitboard pieces(PieceType type, Color color) const noexcept {
      |                            ^                      ~~~~~~~~~~~
./chess.hpp:2323:28: note: candidate template ignored: couldn't infer template argument ''
 2323 |     [[nodiscard]] Bitboard pieces(Pieces... pieces) const noexcept {
      |                            ^
./chess.hpp:2320:28: note: candidate function not viable: requires single argument 'type', but 2 arguments were provided
 2320 |     [[nodiscard]] Bitboard pieces(PieceType type) const noexcept { return pieces_bb_[type]; }
      |                            ^      ~~~~~~~~~~~~~~
fatal error: too many errors emitted, stopping now [-ferror-limit=]
14 warnings and 20 errors generated.
In file included from uci.cpp:11:
./chess.hpp:1083:12: warning: inline variables are a C++17 extension [-Wc++17-extensions]
 1083 |     static inline Bitboard RookAttacks[0x19000]  = {};
      |            ^
./chess.hpp:1084:12: warning: inline variables are a C++17 extension [-Wc++17-extensions]
 1084 |     static inline Bitboard BishopAttacks[0x1480] = {};
      |            ^
./chess.hpp:1086:12: warning: inline variables are a C++17 extension [-Wc++17-extensions]
 1086 |     static inline Magic RookTable[64]   = {};
      |            ^
./chess.hpp:1087:12: warning: inline variables are a C++17 extension [-Wc++17-extensions]
 1087 |     static inline Magic BishopTable[64] = {};
      |            ^
./chess.hpp:1211:16: warning: nested namespace definition is a C++17 extension; define each namespace separately [-Wc++17-extensions]
 1211 | namespace chess::constants {
      |                ^~~~~~~~~~~
      |                 { namespace constants
 1212 | 
 1213 | constexpr Bitboard DEFAULT_CHECKMASK = Bitboard(0xFFFFFFFFFFFFFFFFull);
 1214 | constexpr auto STARTPOS              = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1";
 1215 | constexpr auto MAX_MOVES             = 256;
 1216 | }  // namespace chess::constants
      | } 
./chess.hpp:1670:61: warning: 'constexpr' on lambda expressions is a C++17 extension [-Wc++17-extensions]
 1670 |     static constexpr std::array<U64, 16> castlingKey = []() constexpr {
      |                                                             ^
./chess.hpp:1671:50: warning: 'constexpr' on lambda expressions is a C++17 extension [-Wc++17-extensions]
 1671 |         auto generateCastlingKey = [](int index) constexpr -> U64 {
      |                                                  ^
./chess.hpp:1671:14: error: variable of non-literal type '(lambda at ./chess.hpp:1671:36)' cannot be defined in a constexpr function before C++23
 1671 |         auto generateCastlingKey = [](int index) constexpr -> U64 {
      |              ^
./chess.hpp:1671:36: note: lambda closure types are non-literal types before C++17
 1671 |         auto generateCastlingKey = [](int index) constexpr -> U64 {
      |                                    ^
./chess.hpp:1726:13: error: no template named 'optional' in namespace 'std'
 1726 | inline std::optional<int> parseStringViewToInt(std::string_view sv) {
      |        ~~~~~^
./chess.hpp:1727:33: error: no member named 'nullopt' in namespace 'std'
 1727 |     if (sv.empty()) return std::nullopt;
      |                            ~~~~~^
./chess.hpp:1732:40: error: no member named 'nullopt' in namespace 'std'
 1732 |     if (parsed_sv.empty()) return std::nullopt;
      |                                   ~~~~~^
./chess.hpp:1739:10: warning: decomposition declarations are a C++17 extension [-Wc++17-extensions]
 1739 |     auto [ptr, ec] = std::from_chars(begin, end, result);
      |          ^~~~~~~~~
./chess.hpp:1739:27: error: no member named 'from_chars' in namespace 'std'
 1739 |     auto [ptr, ec] = std::from_chars(begin, end, result);
      |                      ~~~~~^
./chess.hpp:1758:17: error: no member named 'nullopt' in namespace 'std'
 1758 |     return std::nullopt;
      |            ~~~~~^
./chess.hpp:2322:69: error: no template named 'is_convertible_v' in namespace 'std'; did you mean 'is_convertible'?
 2322 |     template <typename... Pieces, typename = std::enable_if_t<(std::is_convertible_v<Pieces, PieceType> && ...)>>
      |                                                                ~~~~~^~~~~~~~~~~~~~~~
      |                                                                     is_convertible
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_convertible.h:22:29: note: 'is_convertible' declared here
   22 | struct _LIBCPP_TEMPLATE_VIS is_convertible : public integral_constant<bool, __is_convertible(_T1, _T2)> {};
      |                             ^
In file included from uci.cpp:11:
./chess.hpp:2322:108: error: expected ')'
 2322 |     template <typename... Pieces, typename = std::enable_if_t<(std::is_convertible_v<Pieces, PieceType> && ...)>>
      |                                                                                                            ^
./chess.hpp:2322:63: note: to match this '('
 2322 |     template <typename... Pieces, typename = std::enable_if_t<(std::is_convertible_v<Pieces, PieceType> && ...)>>
      |                                                               ^
./chess.hpp:2322:112: error: expected expression
 2322 |     template <typename... Pieces, typename = std::enable_if_t<(std::is_convertible_v<Pieces, PieceType> && ...)>>
      |                                                                                                                ^
./chess.hpp:3093:21: error: no member named 'optional' in namespace 'std'
 3093 |     std::array<std::optional<std::string_view>, N> static split_string_view(std::string_view fen,
      |                ~~~~~^
./chess.hpp:3093:46: error: expected '(' for function-style cast or type construction
 3093 |     std::array<std::optional<std::string_view>, N> static split_string_view(std::string_view fen,
      |                              ~~~~~~~~~~~~~~~~^
./chess.hpp:3093:47: error: expected member name or ';' after declaration specifiers
 3093 |     std::array<std::optional<std::string_view>, N> static split_string_view(std::string_view fen,
      |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
./chess.hpp:1881:13: warning: 'if' initialization statements are a C++17 extension [-Wc++17-extensions]
 1881 |         if (auto it = std::find(parts.begin(), parts.end(), "hmvc"); it != parts.end()) {
      |             ^
./chess.hpp:1891:13: warning: 'if' initialization statements are a C++17 extension [-Wc++17-extensions]
 1891 |         if (auto it = std::find(parts.begin(), parts.end(), "fmvn"); it != parts.end()) {
      |             ^
./chess.hpp:1929:21: warning: 'if' initialization statements are a C++17 extension [-Wc++17-extensions]
 1929 |                 if (Piece piece = at(Square(sq)); piece != Piece::NONE) {
      |                     ^
./chess.hpp:2070:24: warning: constexpr if is a C++17 extension [-Wc++17-extensions]
 2070 |                     if constexpr (EXACT) {
      |                        ^
./chess.hpp:2324:62: warning: pack fold expression is a C++17 extension [-Wc++17-extensions]
 2324 |         return (pieces_bb_[static_cast<PieceType>(pieces)] | ...);
      |                                                              ^
./chess.hpp:2337:12: warning: constexpr if is a C++17 extension [-Wc++17-extensions]
 2337 |         if constexpr (std::is_same_v<T, PieceType>) {
      |            ^
./chess.hpp:2337:28: error: no template named 'is_same_v' in namespace 'std'; did you mean 'is_same'?
 2337 |         if constexpr (std::is_same_v<T, PieceType>) {
      |                       ~~~~~^~~~~~~~~
      |                            is_same
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__type_traits/is_same.h:22:29: note: 'is_same' declared here
   22 | struct _LIBCPP_TEMPLATE_VIS is_same : _BoolConstant<__is_same(_Tp, _Up)> {};
      |                             ^
In file included from uci.cpp:11:
./chess.hpp:2337:51: error: expected unqualified-id
 2337 |         if constexpr (std::is_same_v<T, PieceType>) {
      |                                                   ^
./chess.hpp:2366:14: error: use of undeclared identifier 'original_fen_'
 2366 |         if (!original_fen_.empty()) setFen(original_fen_);
      |              ^
./chess.hpp:2366:44: error: use of undeclared identifier 'original_fen_'
 2366 |         if (!original_fen_.empty()) setFen(original_fen_);
      |                                            ^
./chess.hpp:2522:46: error: no matching member function for call to 'pieces'
 2522 |         if (attacks::bishop(square, occ()) & pieces(PieceType::BISHOP, PieceType::QUEEN) & us(color)) return true;
      |                                              ^~~~~~
./chess.hpp:2311:28: note: candidate function not viable: no known conversion from 'const underlying' to 'Color' for 2nd argument
 2311 |     [[nodiscard]] Bitboard pieces(PieceType type, Color color) const noexcept {
      |                            ^                      ~~~~~~~~~~~
./chess.hpp:2323:28: note: candidate template ignored: couldn't infer template argument ''
 2323 |     [[nodiscard]] Bitboard pieces(Pieces... pieces) const noexcept {
      |                            ^
./chess.hpp:2320:28: note: candidate function not viable: requires single argument 'type', but 2 arguments were provided
 2320 |     [[nodiscard]] Bitboard pieces(PieceType type) const noexcept { return pieces_bb_[type]; }
      |                            ^      ~~~~~~~~~~~~~~
./chess.hpp:2523:44: error: no matching member function for call to 'pieces'
 2523 |         if (attacks::rook(square, occ()) & pieces(PieceType::ROOK, PieceType::QUEEN) & us(color)) return true;
      |                                            ^~~~~~
./chess.hpp:2311:28: note: candidate function not viable: no known conversion from 'const underlying' to 'Color' for 2nd argument
 2311 |     [[nodiscard]] Bitboard pieces(PieceType type, Color color) const noexcept {
      |                            ^                      ~~~~~~~~~~~
./chess.hpp:2323:28: note: candidate template ignored: couldn't infer template argument ''
 2323 |     [[nodiscard]] Bitboard pieces(Pieces... pieces) const noexcept {
      |                            ^
./chess.hpp:2320:28: note: candidate function not viable: requires single argument 'type', but 2 arguments were provided
 2320 |     [[nodiscard]] Bitboard pieces(PieceType type) const noexcept { return pieces_bb_[type]; }
      |                            ^      ~~~~~~~~~~~~~~
./chess.hpp:2542:34: error: no matching member function for call to 'pieces'
 2542 |         return bool(us(color) ^ (pieces(PieceType::PAWN, PieceType::KING) & us(color)));
      |                                  ^~~~~~
./chess.hpp:2311:28: note: candidate function not viable: no known conversion from 'const underlying' to 'Color' for 2nd argument
 2311 |     [[nodiscard]] Bitboard pieces(PieceType type, Color color) const noexcept {
      |                            ^                      ~~~~~~~~~~~
./chess.hpp:2323:28: note: candidate template ignored: couldn't infer template argument ''
 2323 |     [[nodiscard]] Bitboard pieces(Pieces... pieces) const noexcept {
      |                            ^
./chess.hpp:2320:28: note: candidate function not viable: requires single argument 'type', but 2 arguments were provided
 2320 |     [[nodiscard]] Bitboard pieces(PieceType type) const noexcept { return pieces_bb_[type]; }
      |                            ^      ~~~~~~~~~~~~~~
fatal error: too many errors emitted, stopping now [-ferror-limit=]
14 warnings and 20 errors generated.
make: *** [all] Error 1