GCC version 17 is sufficient.
g++ -O3 -march=native bench.cpp eval.cpp search.cpp see.cpp timeman.cpp transposition.cpp uci.cpp -o Weak-38F0DE1C
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 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