Makefile:91: GCC currently produces very slow binaries for Stormphrax
Downloading default network mire.nnue
curl -sOL https://github.com/Ciekce/stormphrax-nets/releases/download/mire/mire.nnue
g++ -Isrc/3rdparty/fmt/include -std=c++20 -O3 -flto -DNDEBUG -DSP_NETWORK_FILE=\"mire.nnue\" -DSP_VERSION=7.0.0 -D_SILENCE_CXX20_ATOMIC_INIT_DEPRECATION_WARNING -DSP_NATIVE -march=native -DSP_FAST_PEXT -pthread -o Stormphrax-100DB563 src/3rdparty/fmt/src/format.cc src/main.cpp src/core.cpp src/uci.cpp src/util/split.cpp src/move.cpp src/position/position.cpp src/movegen.cpp src/search.cpp src/util/timer.cpp src/ttable.cpp src/limit/time.cpp src/eval/nnue.cpp src/perft.cpp src/bench.cpp src/tunable.cpp src/opts.cpp src/3rdparty/pyrrhic/tbprobe.cpp src/datagen/datagen.cpp src/wdl.cpp src/cuckoo.cpp src/datagen/marlinformat.cpp src/datagen/viriformat.cpp src/datagen/fen.cpp src/tb.cpp src/3rdparty/zstd/zstddeclib.c src/eval/nnue/io_impl.cpp src/util/ctrlc.cpp src/stats.cpp src/attacks/black_magic/attacks.cpp src/attacks/bmi2/attacks.cpp
In file included from src/position/../attacks/../util/bits.h:26,
                 from src/position/../attacks/../bitboard.h:26,
                 from src/position/../attacks/attacks.h:26,
                 from src/position/position.h:31,
                 from src/correction.h:27,
                 from src/search.h:37,
                 from src/bench.h:23,
                 from src/main.cpp:19:
src/position/../attacks/../util/../arch.h:81:42: warning: use of ‘std::hardware_destructive_interference_size’ [-Winterference-size]
   81 |     constexpr auto kCacheLineSize = std::hardware_destructive_interference_size;
      |                                     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/position/../attacks/../util/../arch.h:81:42: note: its value can vary between compiler versions or with different ‘-mtune’ or ‘-mcpu’ flags
src/position/../attacks/../util/../arch.h:81:42: note: if this use is part of a public ABI, change it to instead use a constant variable you define
src/position/../attacks/../util/../arch.h:81:42: note: the default value for the current CPU tuning is 64 bytes
src/position/../attacks/../util/../arch.h:81:42: note: you can stabilize this value with ‘--param hardware_destructive_interference_size=64’, or disable this warning with ‘-Wno-interference-size’
In file included from src/position/../eval/nnue/arch/multilayer.h:31,
                 from src/position/../eval/arch.h:26,
                 from src/position/../eval/nnue.h:26,
                 from src/position/position.h:32:
src/position/../eval/nnue/arch/../io.h:34:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   34 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:35:21: error: template-id ‘read<stormphrax::i8>’ in declaration of primary template
   35 |         inline bool read<i8>(std::span<i8> dst) {
      |                     ^~~~~~~~
src/position/../eval/nnue/arch/../io.h:39:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   39 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:40:21: error: template-id ‘read<stormphrax::i16>’ in declaration of primary template
   40 |         inline bool read<i16>(std::span<i16> dst) {
      |                     ^~~~~~~~~
src/position/../eval/nnue/arch/../io.h:44:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   44 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:45:21: error: template-id ‘read<stormphrax::i32>’ in declaration of primary template
   45 |         inline bool read<i32>(std::span<i32> dst) {
      |                     ^~~~~~~~~
src/position/../eval/nnue/arch/../io.h:57:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   57 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:58:21: error: template-id ‘write<stormphrax::i8>’ in declaration of primary template
   58 |         inline bool write<i8>(std::span<const i8> src) {
      |                     ^~~~~~~~~
src/position/../eval/nnue/arch/../io.h:62:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   62 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:63:21: error: template-id ‘write<stormphrax::i16>’ in declaration of primary template
   63 |         inline bool write<i16>(std::span<const i16> src) {
      |                     ^~~~~~~~~~
src/position/../eval/nnue/arch/../io.h:67:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   67 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:68:21: error: template-id ‘write<stormphrax::i32>’ in declaration of primary template
   68 |         inline bool write<i32>(std::span<const i32> src) {
      |                     ^~~~~~~~~~
src/position/../eval/nnue/arch/multilayer.h: In member function ‘void stormphrax::eval::nnue::arch::PairwiseMultilayerCReLUSCReLUCReLU<kL1Size, kL2Size, kL3Size, kFtScaleBits, kFtQBits, kL1QBits, kDualActivation, OutputBucketing, kScale>::propagateL1(stormphrax::u32, std::span<const unsigned char, kL1Size>, std::span<int, kL2SizeFull>, const stormphrax::eval::nnue::arch::sparse::SparseContext<kL1Size>&) const’:
src/position/../eval/nnue/arch/multilayer.h:156:87: warning: ignoring attributes on template argument ‘stormphrax::util::simd::Vector<int>’ {aka ‘__m256i’} [-Wignored-attributes]
  156 |             SP_SIMD_ALIGNAS util::MultiArray<Vector<i32>, kL2Size / kChunkSize<i32>, 4> intermediate{};
      |                                                                                       ^
In file included from src/position/../eval/nnue.h:29:
src/position/../eval/nnue/input.h: At global scope:
src/position/../eval/nnue/input.h:338:15: warning: declaration of ‘using stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>::Accumulator = class stormphrax::eval::nnue::Accumulator<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet> >’ changes meaning of ‘Accumulator’ [-Wchanges-meaning]
  338 |         using Accumulator = Accumulator<FeatureTransformer<Type, kOutputs, FeatureSet>>;
      |               ^~~~~~~~~~~
src/position/../eval/nnue/input.h:338:29: note: used here to mean ‘class stormphrax::eval::nnue::Accumulator<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet> >’
  338 |         using Accumulator = Accumulator<FeatureTransformer<Type, kOutputs, FeatureSet>>;
      |                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/position/../eval/nnue/input.h:38:11: note: declared here
   38 |     class Accumulator {
      |           ^~~~~~~~~~~
src/position/../eval/nnue/input.h:339:15: warning: declaration of ‘using stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>::RefreshTable = struct stormphrax::eval::nnue::RefreshTable<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>’ changes meaning of ‘RefreshTable’ [-Wchanges-meaning]
  339 |         using RefreshTable =
      |               ^~~~~~~~~~~~
src/position/../eval/nnue/input.h:340:13: note: used here to mean ‘struct stormphrax::eval::nnue::RefreshTable<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>’
  340 |             RefreshTable<FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>;
      |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/position/../eval/nnue/input.h:320:12: note: declared here
  320 |     struct RefreshTable {
      |            ^~~~~~~~~~~~
src/search.h:395:19: error: explicit specialization in non-namespace scope ‘class stormphrax::search::Searcher’
  395 |         template <>
      |                   ^
src/search.h:396:15: error: template-id ‘search<false, true>’ in declaration of primary template
  396 |         Score search<false, true>(
      |               ^~~~~~~~~~~~~~~~~~~
In file included from src/3rdparty/pyrrhic/../../util/bits.h:26,
                 from src/3rdparty/pyrrhic/tbconfig.h:28,
                 from src/3rdparty/pyrrhic/tbprobe.h:32,
                 from src/uci.cpp:28:
src/3rdparty/pyrrhic/../../util/../arch.h:81:42: warning: use of ‘std::hardware_destructive_interference_size’ [-Winterference-size]
   81 |     constexpr auto kCacheLineSize = std::hardware_destructive_interference_size;
      |                                     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/3rdparty/pyrrhic/../../util/../arch.h:81:42: note: its value can vary between compiler versions or with different ‘-mtune’ or ‘-mcpu’ flags
src/3rdparty/pyrrhic/../../util/../arch.h:81:42: note: if this use is part of a public ABI, change it to instead use a constant variable you define
src/3rdparty/pyrrhic/../../util/../arch.h:81:42: note: the default value for the current CPU tuning is 64 bytes
src/3rdparty/pyrrhic/../../util/../arch.h:81:42: note: you can stabilize this value with ‘--param hardware_destructive_interference_size=64’, or disable this warning with ‘-Wno-interference-size’
In file included from src/3rdparty/pyrrhic/../../position/../eval/nnue/arch/multilayer.h:31,
                 from src/3rdparty/pyrrhic/../../position/../eval/arch.h:26,
                 from src/3rdparty/pyrrhic/../../position/../eval/nnue.h:26,
                 from src/3rdparty/pyrrhic/../../position/position.h:32,
                 from src/3rdparty/pyrrhic/../../correction.h:27,
                 from src/3rdparty/pyrrhic/../../search.h:37,
                 from src/3rdparty/pyrrhic/tbconfig.h:30:
src/3rdparty/pyrrhic/../../position/../eval/nnue/arch/../io.h:34:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   34 |         template <>
      |                   ^
src/3rdparty/pyrrhic/../../position/../eval/nnue/arch/../io.h:35:21: error: template-id ‘read<stormphrax::i8>’ in declaration of primary template
   35 |         inline bool read<i8>(std::span<i8> dst) {
      |                     ^~~~~~~~
src/3rdparty/pyrrhic/../../position/../eval/nnue/arch/../io.h:39:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   39 |         template <>
      |                   ^
src/3rdparty/pyrrhic/../../position/../eval/nnue/arch/../io.h:40:21: error: template-id ‘read<stormphrax::i16>’ in declaration of primary template
   40 |         inline bool read<i16>(std::span<i16> dst) {
      |                     ^~~~~~~~~
src/3rdparty/pyrrhic/../../position/../eval/nnue/arch/../io.h:44:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   44 |         template <>
      |                   ^
src/3rdparty/pyrrhic/../../position/../eval/nnue/arch/../io.h:45:21: error: template-id ‘read<stormphrax::i32>’ in declaration of primary template
   45 |         inline bool read<i32>(std::span<i32> dst) {
      |                     ^~~~~~~~~
src/3rdparty/pyrrhic/../../position/../eval/nnue/arch/../io.h:57:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   57 |         template <>
      |                   ^
src/3rdparty/pyrrhic/../../position/../eval/nnue/arch/../io.h:58:21: error: template-id ‘write<stormphrax::i8>’ in declaration of primary template
   58 |         inline bool write<i8>(std::span<const i8> src) {
      |                     ^~~~~~~~~
src/3rdparty/pyrrhic/../../position/../eval/nnue/arch/../io.h:62:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   62 |         template <>
      |                   ^
src/3rdparty/pyrrhic/../../position/../eval/nnue/arch/../io.h:63:21: error: template-id ‘write<stormphrax::i16>’ in declaration of primary template
   63 |         inline bool write<i16>(std::span<const i16> src) {
      |                     ^~~~~~~~~~
src/3rdparty/pyrrhic/../../position/../eval/nnue/arch/../io.h:67:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   67 |         template <>
      |                   ^
src/3rdparty/pyrrhic/../../position/../eval/nnue/arch/../io.h:68:21: error: template-id ‘write<stormphrax::i32>’ in declaration of primary template
   68 |         inline bool write<i32>(std::span<const i32> src) {
      |                     ^~~~~~~~~~
src/3rdparty/pyrrhic/../../position/../eval/nnue/arch/multilayer.h: In member function ‘void stormphrax::eval::nnue::arch::PairwiseMultilayerCReLUSCReLUCReLU<kL1Size, kL2Size, kL3Size, kFtScaleBits, kFtQBits, kL1QBits, kDualActivation, OutputBucketing, kScale>::propagateL1(stormphrax::u32, std::span<const unsigned char, kL1Size>, std::span<int, kL2SizeFull>, const stormphrax::eval::nnue::arch::sparse::SparseContext<kL1Size>&) const’:
src/3rdparty/pyrrhic/../../position/../eval/nnue/arch/multilayer.h:156:87: warning: ignoring attributes on template argument ‘stormphrax::util::simd::Vector<int>’ {aka ‘__m256i’} [-Wignored-attributes]
  156 |             SP_SIMD_ALIGNAS util::MultiArray<Vector<i32>, kL2Size / kChunkSize<i32>, 4> intermediate{};
      |                                                                                       ^
In file included from src/3rdparty/pyrrhic/../../position/../eval/nnue.h:29:
src/3rdparty/pyrrhic/../../position/../eval/nnue/input.h: At global scope:
src/3rdparty/pyrrhic/../../position/../eval/nnue/input.h:338:15: warning: declaration of ‘using stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>::Accumulator = class stormphrax::eval::nnue::Accumulator<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet> >’ changes meaning of ‘Accumulator’ [-Wchanges-meaning]
  338 |         using Accumulator = Accumulator<FeatureTransformer<Type, kOutputs, FeatureSet>>;
      |               ^~~~~~~~~~~
src/3rdparty/pyrrhic/../../position/../eval/nnue/input.h:338:29: note: used here to mean ‘class stormphrax::eval::nnue::Accumulator<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet> >’
  338 |         using Accumulator = Accumulator<FeatureTransformer<Type, kOutputs, FeatureSet>>;
      |                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/3rdparty/pyrrhic/../../position/../eval/nnue/input.h:38:11: note: declared here
   38 |     class Accumulator {
      |           ^~~~~~~~~~~
src/3rdparty/pyrrhic/../../position/../eval/nnue/input.h:339:15: warning: declaration of ‘using stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>::RefreshTable = struct stormphrax::eval::nnue::RefreshTable<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>’ changes meaning of ‘RefreshTable’ [-Wchanges-meaning]
  339 |         using RefreshTable =
      |               ^~~~~~~~~~~~
src/3rdparty/pyrrhic/../../position/../eval/nnue/input.h:340:13: note: used here to mean ‘struct stormphrax::eval::nnue::RefreshTable<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>’
  340 |             RefreshTable<FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>;
      |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/3rdparty/pyrrhic/../../position/../eval/nnue/input.h:320:12: note: declared here
  320 |     struct RefreshTable {
      |            ^~~~~~~~~~~~
src/3rdparty/pyrrhic/../../search.h:395:19: error: explicit specialization in non-namespace scope ‘class stormphrax::search::Searcher’
  395 |         template <>
      |                   ^
src/3rdparty/pyrrhic/../../search.h:396:15: error: template-id ‘search<false, true>’ in declaration of primary template
  396 |         Score search<false, true>(
      |               ^~~~~~~~~~~~~~~~~~~
In file included from src/position/../attacks/../util/bits.h:26,
                 from src/position/../attacks/../bitboard.h:26,
                 from src/position/../attacks/attacks.h:26,
                 from src/position/position.h:31,
                 from src/move.cpp:22:
src/position/../attacks/../util/../arch.h:81:42: warning: use of ‘std::hardware_destructive_interference_size’ [-Winterference-size]
   81 |     constexpr auto kCacheLineSize = std::hardware_destructive_interference_size;
      |                                     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/position/../attacks/../util/../arch.h:81:42: note: its value can vary between compiler versions or with different ‘-mtune’ or ‘-mcpu’ flags
src/position/../attacks/../util/../arch.h:81:42: note: if this use is part of a public ABI, change it to instead use a constant variable you define
src/position/../attacks/../util/../arch.h:81:42: note: the default value for the current CPU tuning is 64 bytes
src/position/../attacks/../util/../arch.h:81:42: note: you can stabilize this value with ‘--param hardware_destructive_interference_size=64’, or disable this warning with ‘-Wno-interference-size’
In file included from src/position/../eval/nnue/arch/multilayer.h:31,
                 from src/position/../eval/arch.h:26,
                 from src/position/../eval/nnue.h:26,
                 from src/position/position.h:32:
src/position/../eval/nnue/arch/../io.h:34:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   34 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:35:21: error: template-id ‘read<stormphrax::i8>’ in declaration of primary template
   35 |         inline bool read<i8>(std::span<i8> dst) {
      |                     ^~~~~~~~
src/position/../eval/nnue/arch/../io.h:39:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   39 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:40:21: error: template-id ‘read<stormphrax::i16>’ in declaration of primary template
   40 |         inline bool read<i16>(std::span<i16> dst) {
      |                     ^~~~~~~~~
src/position/../eval/nnue/arch/../io.h:44:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   44 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:45:21: error: template-id ‘read<stormphrax::i32>’ in declaration of primary template
   45 |         inline bool read<i32>(std::span<i32> dst) {
      |                     ^~~~~~~~~
src/position/../eval/nnue/arch/../io.h:57:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   57 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:58:21: error: template-id ‘write<stormphrax::i8>’ in declaration of primary template
   58 |         inline bool write<i8>(std::span<const i8> src) {
      |                     ^~~~~~~~~
src/position/../eval/nnue/arch/../io.h:62:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   62 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:63:21: error: template-id ‘write<stormphrax::i16>’ in declaration of primary template
   63 |         inline bool write<i16>(std::span<const i16> src) {
      |                     ^~~~~~~~~~
src/position/../eval/nnue/arch/../io.h:67:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   67 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:68:21: error: template-id ‘write<stormphrax::i32>’ in declaration of primary template
   68 |         inline bool write<i32>(std::span<const i32> src) {
      |                     ^~~~~~~~~~
src/position/../eval/nnue/arch/multilayer.h: In member function ‘void stormphrax::eval::nnue::arch::PairwiseMultilayerCReLUSCReLUCReLU<kL1Size, kL2Size, kL3Size, kFtScaleBits, kFtQBits, kL1QBits, kDualActivation, OutputBucketing, kScale>::propagateL1(stormphrax::u32, std::span<const unsigned char, kL1Size>, std::span<int, kL2SizeFull>, const stormphrax::eval::nnue::arch::sparse::SparseContext<kL1Size>&) const’:
src/position/../eval/nnue/arch/multilayer.h:156:87: warning: ignoring attributes on template argument ‘stormphrax::util::simd::Vector<int>’ {aka ‘__m256i’} [-Wignored-attributes]
  156 |             SP_SIMD_ALIGNAS util::MultiArray<Vector<i32>, kL2Size / kChunkSize<i32>, 4> intermediate{};
      |                                                                                       ^
In file included from src/position/../eval/nnue.h:29:
src/position/../eval/nnue/input.h: At global scope:
src/position/../eval/nnue/input.h:338:15: warning: declaration of ‘using stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>::Accumulator = class stormphrax::eval::nnue::Accumulator<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet> >’ changes meaning of ‘Accumulator’ [-Wchanges-meaning]
  338 |         using Accumulator = Accumulator<FeatureTransformer<Type, kOutputs, FeatureSet>>;
      |               ^~~~~~~~~~~
src/position/../eval/nnue/input.h:338:29: note: used here to mean ‘class stormphrax::eval::nnue::Accumulator<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet> >’
  338 |         using Accumulator = Accumulator<FeatureTransformer<Type, kOutputs, FeatureSet>>;
      |                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/position/../eval/nnue/input.h:38:11: note: declared here
   38 |     class Accumulator {
      |           ^~~~~~~~~~~
src/position/../eval/nnue/input.h:339:15: warning: declaration of ‘using stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>::RefreshTable = struct stormphrax::eval::nnue::RefreshTable<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>’ changes meaning of ‘RefreshTable’ [-Wchanges-meaning]
  339 |         using RefreshTable =
      |               ^~~~~~~~~~~~
src/position/../eval/nnue/input.h:340:13: note: used here to mean ‘struct stormphrax::eval::nnue::RefreshTable<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>’
  340 |             RefreshTable<FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>;
      |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/position/../eval/nnue/input.h:320:12: note: declared here
  320 |     struct RefreshTable {
      |            ^~~~~~~~~~~~
In file included from src/position/../attacks/../util/bits.h:26,
                 from src/position/../attacks/../bitboard.h:26,
                 from src/position/../attacks/attacks.h:26,
                 from src/position/position.h:31,
                 from src/position/position.cpp:19:
src/position/../attacks/../util/../arch.h:81:42: warning: use of ‘std::hardware_destructive_interference_size’ [-Winterference-size]
   81 |     constexpr auto kCacheLineSize = std::hardware_destructive_interference_size;
      |                                     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/position/../attacks/../util/../arch.h:81:42: note: its value can vary between compiler versions or with different ‘-mtune’ or ‘-mcpu’ flags
src/position/../attacks/../util/../arch.h:81:42: note: if this use is part of a public ABI, change it to instead use a constant variable you define
src/position/../attacks/../util/../arch.h:81:42: note: the default value for the current CPU tuning is 64 bytes
src/position/../attacks/../util/../arch.h:81:42: note: you can stabilize this value with ‘--param hardware_destructive_interference_size=64’, or disable this warning with ‘-Wno-interference-size’
In file included from src/position/../eval/nnue/arch/multilayer.h:31,
                 from src/position/../eval/arch.h:26,
                 from src/position/../eval/nnue.h:26,
                 from src/position/position.h:32:
src/position/../eval/nnue/arch/../io.h:34:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   34 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:35:21: error: template-id ‘read<stormphrax::i8>’ in declaration of primary template
   35 |         inline bool read<i8>(std::span<i8> dst) {
      |                     ^~~~~~~~
src/position/../eval/nnue/arch/../io.h:39:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   39 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:40:21: error: template-id ‘read<stormphrax::i16>’ in declaration of primary template
   40 |         inline bool read<i16>(std::span<i16> dst) {
      |                     ^~~~~~~~~
src/position/../eval/nnue/arch/../io.h:44:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   44 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:45:21: error: template-id ‘read<stormphrax::i32>’ in declaration of primary template
   45 |         inline bool read<i32>(std::span<i32> dst) {
      |                     ^~~~~~~~~
src/position/../eval/nnue/arch/../io.h:57:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   57 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:58:21: error: template-id ‘write<stormphrax::i8>’ in declaration of primary template
   58 |         inline bool write<i8>(std::span<const i8> src) {
      |                     ^~~~~~~~~
src/position/../eval/nnue/arch/../io.h:62:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   62 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:63:21: error: template-id ‘write<stormphrax::i16>’ in declaration of primary template
   63 |         inline bool write<i16>(std::span<const i16> src) {
      |                     ^~~~~~~~~~
src/position/../eval/nnue/arch/../io.h:67:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   67 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:68:21: error: template-id ‘write<stormphrax::i32>’ in declaration of primary template
   68 |         inline bool write<i32>(std::span<const i32> src) {
      |                     ^~~~~~~~~~
src/position/../eval/nnue/arch/multilayer.h: In member function ‘void stormphrax::eval::nnue::arch::PairwiseMultilayerCReLUSCReLUCReLU<kL1Size, kL2Size, kL3Size, kFtScaleBits, kFtQBits, kL1QBits, kDualActivation, OutputBucketing, kScale>::propagateL1(stormphrax::u32, std::span<const unsigned char, kL1Size>, std::span<int, kL2SizeFull>, const stormphrax::eval::nnue::arch::sparse::SparseContext<kL1Size>&) const’:
src/position/../eval/nnue/arch/multilayer.h:156:87: warning: ignoring attributes on template argument ‘stormphrax::util::simd::Vector<int>’ {aka ‘__m256i’} [-Wignored-attributes]
  156 |             SP_SIMD_ALIGNAS util::MultiArray<Vector<i32>, kL2Size / kChunkSize<i32>, 4> intermediate{};
      |                                                                                       ^
In file included from src/position/../eval/nnue.h:29:
src/position/../eval/nnue/input.h: At global scope:
src/position/../eval/nnue/input.h:338:15: warning: declaration of ‘using stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>::Accumulator = class stormphrax::eval::nnue::Accumulator<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet> >’ changes meaning of ‘Accumulator’ [-Wchanges-meaning]
  338 |         using Accumulator = Accumulator<FeatureTransformer<Type, kOutputs, FeatureSet>>;
      |               ^~~~~~~~~~~
src/position/../eval/nnue/input.h:338:29: note: used here to mean ‘class stormphrax::eval::nnue::Accumulator<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet> >’
  338 |         using Accumulator = Accumulator<FeatureTransformer<Type, kOutputs, FeatureSet>>;
      |                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/position/../eval/nnue/input.h:38:11: note: declared here
   38 |     class Accumulator {
      |           ^~~~~~~~~~~
src/position/../eval/nnue/input.h:339:15: warning: declaration of ‘using stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>::RefreshTable = struct stormphrax::eval::nnue::RefreshTable<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>’ changes meaning of ‘RefreshTable’ [-Wchanges-meaning]
  339 |         using RefreshTable =
      |               ^~~~~~~~~~~~
src/position/../eval/nnue/input.h:340:13: note: used here to mean ‘struct stormphrax::eval::nnue::RefreshTable<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>’
  340 |             RefreshTable<FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>;
      |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/position/../eval/nnue/input.h:320:12: note: declared here
  320 |     struct RefreshTable {
      |            ^~~~~~~~~~~~
In file included from src/position/../attacks/../util/bits.h:26,
                 from src/position/../attacks/../bitboard.h:26,
                 from src/position/../attacks/attacks.h:26,
                 from src/position/position.h:31,
                 from src/movegen.h:24,
                 from src/movegen.cpp:19:
src/position/../attacks/../util/../arch.h:81:42: warning: use of ‘std::hardware_destructive_interference_size’ [-Winterference-size]
   81 |     constexpr auto kCacheLineSize = std::hardware_destructive_interference_size;
      |                                     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/position/../attacks/../util/../arch.h:81:42: note: its value can vary between compiler versions or with different ‘-mtune’ or ‘-mcpu’ flags
src/position/../attacks/../util/../arch.h:81:42: note: if this use is part of a public ABI, change it to instead use a constant variable you define
src/position/../attacks/../util/../arch.h:81:42: note: the default value for the current CPU tuning is 64 bytes
src/position/../attacks/../util/../arch.h:81:42: note: you can stabilize this value with ‘--param hardware_destructive_interference_size=64’, or disable this warning with ‘-Wno-interference-size’
In file included from src/position/../eval/nnue/arch/multilayer.h:31,
                 from src/position/../eval/arch.h:26,
                 from src/position/../eval/nnue.h:26,
                 from src/position/position.h:32:
src/position/../eval/nnue/arch/../io.h:34:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   34 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:35:21: error: template-id ‘read<stormphrax::i8>’ in declaration of primary template
   35 |         inline bool read<i8>(std::span<i8> dst) {
      |                     ^~~~~~~~
src/position/../eval/nnue/arch/../io.h:39:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   39 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:40:21: error: template-id ‘read<stormphrax::i16>’ in declaration of primary template
   40 |         inline bool read<i16>(std::span<i16> dst) {
      |                     ^~~~~~~~~
src/position/../eval/nnue/arch/../io.h:44:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   44 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:45:21: error: template-id ‘read<stormphrax::i32>’ in declaration of primary template
   45 |         inline bool read<i32>(std::span<i32> dst) {
      |                     ^~~~~~~~~
src/position/../eval/nnue/arch/../io.h:57:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   57 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:58:21: error: template-id ‘write<stormphrax::i8>’ in declaration of primary template
   58 |         inline bool write<i8>(std::span<const i8> src) {
      |                     ^~~~~~~~~
src/position/../eval/nnue/arch/../io.h:62:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   62 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:63:21: error: template-id ‘write<stormphrax::i16>’ in declaration of primary template
   63 |         inline bool write<i16>(std::span<const i16> src) {
      |                     ^~~~~~~~~~
src/position/../eval/nnue/arch/../io.h:67:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   67 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:68:21: error: template-id ‘write<stormphrax::i32>’ in declaration of primary template
   68 |         inline bool write<i32>(std::span<const i32> src) {
      |                     ^~~~~~~~~~
src/position/../eval/nnue/arch/multilayer.h: In member function ‘void stormphrax::eval::nnue::arch::PairwiseMultilayerCReLUSCReLUCReLU<kL1Size, kL2Size, kL3Size, kFtScaleBits, kFtQBits, kL1QBits, kDualActivation, OutputBucketing, kScale>::propagateL1(stormphrax::u32, std::span<const unsigned char, kL1Size>, std::span<int, kL2SizeFull>, const stormphrax::eval::nnue::arch::sparse::SparseContext<kL1Size>&) const’:
src/position/../eval/nnue/arch/multilayer.h:156:87: warning: ignoring attributes on template argument ‘stormphrax::util::simd::Vector<int>’ {aka ‘__m256i’} [-Wignored-attributes]
  156 |             SP_SIMD_ALIGNAS util::MultiArray<Vector<i32>, kL2Size / kChunkSize<i32>, 4> intermediate{};
      |                                                                                       ^
In file included from src/position/../eval/nnue.h:29:
src/position/../eval/nnue/input.h: At global scope:
src/position/../eval/nnue/input.h:338:15: warning: declaration of ‘using stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>::Accumulator = class stormphrax::eval::nnue::Accumulator<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet> >’ changes meaning of ‘Accumulator’ [-Wchanges-meaning]
  338 |         using Accumulator = Accumulator<FeatureTransformer<Type, kOutputs, FeatureSet>>;
      |               ^~~~~~~~~~~
src/position/../eval/nnue/input.h:338:29: note: used here to mean ‘class stormphrax::eval::nnue::Accumulator<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet> >’
  338 |         using Accumulator = Accumulator<FeatureTransformer<Type, kOutputs, FeatureSet>>;
      |                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/position/../eval/nnue/input.h:38:11: note: declared here
   38 |     class Accumulator {
      |           ^~~~~~~~~~~
src/position/../eval/nnue/input.h:339:15: warning: declaration of ‘using stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>::RefreshTable = struct stormphrax::eval::nnue::RefreshTable<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>’ changes meaning of ‘RefreshTable’ [-Wchanges-meaning]
  339 |         using RefreshTable =
      |               ^~~~~~~~~~~~
src/position/../eval/nnue/input.h:340:13: note: used here to mean ‘struct stormphrax::eval::nnue::RefreshTable<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>’
  340 |             RefreshTable<FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>;
      |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/position/../eval/nnue/input.h:320:12: note: declared here
  320 |     struct RefreshTable {
      |            ^~~~~~~~~~~~
In file included from src/position/../attacks/../util/bits.h:26,
                 from src/position/../attacks/../bitboard.h:26,
                 from src/position/../attacks/attacks.h:26,
                 from src/position/position.h:31,
                 from src/correction.h:27,
                 from src/search.h:37,
                 from src/search.cpp:19:
src/position/../attacks/../util/../arch.h:81:42: warning: use of ‘std::hardware_destructive_interference_size’ [-Winterference-size]
   81 |     constexpr auto kCacheLineSize = std::hardware_destructive_interference_size;
      |                                     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/position/../attacks/../util/../arch.h:81:42: note: its value can vary between compiler versions or with different ‘-mtune’ or ‘-mcpu’ flags
src/position/../attacks/../util/../arch.h:81:42: note: if this use is part of a public ABI, change it to instead use a constant variable you define
src/position/../attacks/../util/../arch.h:81:42: note: the default value for the current CPU tuning is 64 bytes
src/position/../attacks/../util/../arch.h:81:42: note: you can stabilize this value with ‘--param hardware_destructive_interference_size=64’, or disable this warning with ‘-Wno-interference-size’
In file included from src/position/../eval/nnue/arch/multilayer.h:31,
                 from src/position/../eval/arch.h:26,
                 from src/position/../eval/nnue.h:26,
                 from src/position/position.h:32:
src/position/../eval/nnue/arch/../io.h:34:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   34 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:35:21: error: template-id ‘read<stormphrax::i8>’ in declaration of primary template
   35 |         inline bool read<i8>(std::span<i8> dst) {
      |                     ^~~~~~~~
src/position/../eval/nnue/arch/../io.h:39:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   39 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:40:21: error: template-id ‘read<stormphrax::i16>’ in declaration of primary template
   40 |         inline bool read<i16>(std::span<i16> dst) {
      |                     ^~~~~~~~~
src/position/../eval/nnue/arch/../io.h:44:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   44 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:45:21: error: template-id ‘read<stormphrax::i32>’ in declaration of primary template
   45 |         inline bool read<i32>(std::span<i32> dst) {
      |                     ^~~~~~~~~
src/position/../eval/nnue/arch/../io.h:57:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   57 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:58:21: error: template-id ‘write<stormphrax::i8>’ in declaration of primary template
   58 |         inline bool write<i8>(std::span<const i8> src) {
      |                     ^~~~~~~~~
src/position/../eval/nnue/arch/../io.h:62:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   62 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:63:21: error: template-id ‘write<stormphrax::i16>’ in declaration of primary template
   63 |         inline bool write<i16>(std::span<const i16> src) {
      |                     ^~~~~~~~~~
src/position/../eval/nnue/arch/../io.h:67:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   67 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:68:21: error: template-id ‘write<stormphrax::i32>’ in declaration of primary template
   68 |         inline bool write<i32>(std::span<const i32> src) {
      |                     ^~~~~~~~~~
src/position/../eval/nnue/arch/multilayer.h: In member function ‘void stormphrax::eval::nnue::arch::PairwiseMultilayerCReLUSCReLUCReLU<kL1Size, kL2Size, kL3Size, kFtScaleBits, kFtQBits, kL1QBits, kDualActivation, OutputBucketing, kScale>::propagateL1(stormphrax::u32, std::span<const unsigned char, kL1Size>, std::span<int, kL2SizeFull>, const stormphrax::eval::nnue::arch::sparse::SparseContext<kL1Size>&) const’:
src/position/../eval/nnue/arch/multilayer.h:156:87: warning: ignoring attributes on template argument ‘stormphrax::util::simd::Vector<int>’ {aka ‘__m256i’} [-Wignored-attributes]
  156 |             SP_SIMD_ALIGNAS util::MultiArray<Vector<i32>, kL2Size / kChunkSize<i32>, 4> intermediate{};
      |                                                                                       ^
In file included from src/position/../eval/nnue.h:29:
src/position/../eval/nnue/input.h: At global scope:
src/position/../eval/nnue/input.h:338:15: warning: declaration of ‘using stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>::Accumulator = class stormphrax::eval::nnue::Accumulator<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet> >’ changes meaning of ‘Accumulator’ [-Wchanges-meaning]
  338 |         using Accumulator = Accumulator<FeatureTransformer<Type, kOutputs, FeatureSet>>;
      |               ^~~~~~~~~~~
src/position/../eval/nnue/input.h:338:29: note: used here to mean ‘class stormphrax::eval::nnue::Accumulator<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet> >’
  338 |         using Accumulator = Accumulator<FeatureTransformer<Type, kOutputs, FeatureSet>>;
      |                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/position/../eval/nnue/input.h:38:11: note: declared here
   38 |     class Accumulator {
      |           ^~~~~~~~~~~
src/position/../eval/nnue/input.h:339:15: warning: declaration of ‘using stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>::RefreshTable = struct stormphrax::eval::nnue::RefreshTable<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>’ changes meaning of ‘RefreshTable’ [-Wchanges-meaning]
  339 |         using RefreshTable =
      |               ^~~~~~~~~~~~
src/position/../eval/nnue/input.h:340:13: note: used here to mean ‘struct stormphrax::eval::nnue::RefreshTable<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>’
  340 |             RefreshTable<FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>;
      |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/position/../eval/nnue/input.h:320:12: note: declared here
  320 |     struct RefreshTable {
      |            ^~~~~~~~~~~~
src/search.h:395:19: error: explicit specialization in non-namespace scope ‘class stormphrax::search::Searcher’
  395 |         template <>
      |                   ^
src/search.h:396:15: error: template-id ‘search<false, true>’ in declaration of primary template
  396 |         Score search<false, true>(
      |               ^~~~~~~~~~~~~~~~~~~
src/search.cpp: In instantiation of ‘stormphrax::Score stormphrax::search::Searcher::search(stormphrax::search::ThreadData&, const stormphrax::Position&, stormphrax::search::PvList&, stormphrax::i32, stormphrax::i32, stormphrax::u32, stormphrax::Score, stormphrax::Score, bool) [with bool kPvNode = true; bool kRootNode = true; stormphrax::Score = int; stormphrax::i32 = int; stormphrax::u32 = unsigned int]’:
src/search.cpp:381:50:   required from here
src/search.cpp:729:35: error: use of deleted function ‘stormphrax::Score stormphrax::search::Searcher::search(stormphrax::search::ThreadData&, const stormphrax::Position&, stormphrax::search::PvList&, stormphrax::i32, stormphrax::i32, stormphrax::u32, stormphrax::Score, stormphrax::Score, bool)’
  729 |                     return -search(
      |                             ~~~~~~^
  730 |                         thread,
      |                         ~~~~~~~    
  731 |                         newPos,
      |                         ~~~~~~~    
  732 |                         curr.pv,
      |                         ~~~~~~~~   
  733 |                         depth - R,
      |                         ~~~~~~~~~~ 
  734 |                         ply + 1,
      |                         ~~~~~~~~   
  735 |                         moveStackIdx,
      |                         ~~~~~~~~~~~~~
  736 |                         -beta,
      |                         ~~~~~~     
  737 |                         -beta + 1,
      |                         ~~~~~~~~~~ 
  738 |                         !cutnode
      |                         ~~~~~~~~   
  739 |                     );
      |                     ~              
src/search.h:396:15: note: declared here
  396 |         Score search<false, true>(
      |               ^~~~~~~~~~~~~~~~~~~
src/search.cpp:729:35: error: use of deleted function ‘stormphrax::Score stormphrax::search::Searcher::search(stormphrax::search::ThreadData&, const stormphrax::Position&, stormphrax::search::PvList&, stormphrax::i32, stormphrax::i32, stormphrax::u32, stormphrax::Score, stormphrax::Score, bool)’
  729 |                     return -search(
      |                             ~~~~~~^
  730 |                         thread,
      |                         ~~~~~~~    
  731 |                         newPos,
      |                         ~~~~~~~    
  732 |                         curr.pv,
      |                         ~~~~~~~~   
  733 |                         depth - R,
      |                         ~~~~~~~~~~ 
  734 |                         ply + 1,
      |                         ~~~~~~~~   
  735 |                         moveStackIdx,
      |                         ~~~~~~~~~~~~~
  736 |                         -beta,
      |                         ~~~~~~     
  737 |                         -beta + 1,
      |                         ~~~~~~~~~~ 
  738 |                         !cutnode
      |                         ~~~~~~~~   
  739 |                     );
      |                     ~              
src/search.h:396:15: note: declared here
  396 |         Score search<false, true>(
      |               ^~~~~~~~~~~~~~~~~~~
src/search.cpp:750:31: error: use of deleted function ‘stormphrax::Score stormphrax::search::Searcher::search(stormphrax::search::ThreadData&, const stormphrax::Position&, stormphrax::search::PvList&, stormphrax::i32, stormphrax::i32, stormphrax::u32, stormphrax::Score, stormphrax::Score, bool)’
  750 |                         search(thread, pos, curr.pv, depth - R, ply, moveStackIdx + 1, beta - 1, beta, true);
      |                         ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/search.h:396:15: note: declared here
  396 |         Score search<false, true>(
      |               ^~~~~~~~~~~~~~~~~~~
src/search.cpp:750:31: error: use of deleted function ‘stormphrax::Score stormphrax::search::Searcher::search(stormphrax::search::ThreadData&, const stormphrax::Position&, stormphrax::search::PvList&, stormphrax::i32, stormphrax::i32, stormphrax::u32, stormphrax::Score, stormphrax::Score, bool)’
  750 |                         search(thread, pos, curr.pv, depth - R, ply, moveStackIdx + 1, beta - 1, beta, true);
      |                         ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/search.h:396:15: note: declared here
  396 |         Score search<false, true>(
      |               ^~~~~~~~~~~~~~~~~~~
src/search.cpp:788:40: error: use of deleted function ‘stormphrax::Score stormphrax::search::Searcher::search(stormphrax::search::ThreadData&, const stormphrax::Position&, stormphrax::search::PvList&, stormphrax::i32, stormphrax::i32, stormphrax::u32, stormphrax::Score, stormphrax::Score, bool)’
  788 |                         score = -search(
      |                                  ~~~~~~^
  789 |                             thread,
      |                             ~~~~~~~     
  790 |                             newPos,
      |                             ~~~~~~~     
  791 |                             curr.pv,
      |                             ~~~~~~~~    
  792 |                             probcutDepth - 1,
      |                             ~~~~~~~~~~~~~~~~~
  793 |                             ply + 1,
      |                             ~~~~~~~~    
  794 |                             moveStackIdx + 1,
      |                             ~~~~~~~~~~~~~~~~~
  795 |                             -probcutBeta,
      |                             ~~~~~~~~~~~~~
  796 |                             -probcutBeta + 1,
      |                             ~~~~~~~~~~~~~~~~~
  797 |                             !cutnode
      |                             ~~~~~~~~    
  798 |                         );
      |                         ~               
src/search.h:396:15: note: declared here
  396 |         Score search<false, true>(
      |               ^~~~~~~~~~~~~~~~~~~
src/search.cpp:788:40: error: use of deleted function ‘stormphrax::Score stormphrax::search::Searcher::search(stormphrax::search::ThreadData&, const stormphrax::Position&, stormphrax::search::PvList&, stormphrax::i32, stormphrax::i32, stormphrax::u32, stormphrax::Score, stormphrax::Score, bool)’
  788 |                         score = -search(
      |                                  ~~~~~~^
  789 |                             thread,
      |                             ~~~~~~~     
  790 |                             newPos,
      |                             ~~~~~~~     
  791 |                             curr.pv,
      |                             ~~~~~~~~    
  792 |                             probcutDepth - 1,
      |                             ~~~~~~~~~~~~~~~~~
  793 |                             ply + 1,
      |                             ~~~~~~~~    
  794 |                             moveStackIdx + 1,
      |                             ~~~~~~~~~~~~~~~~~
  795 |                             -probcutBeta,
      |                             ~~~~~~~~~~~~~
  796 |                             -probcutBeta + 1,
      |                             ~~~~~~~~~~~~~~~~~
  797 |                             !cutnode
      |                             ~~~~~~~~    
  798 |                         );
      |                         ~               
src/search.h:396:15: note: declared here
  396 |         Score search<false, true>(
      |               ^~~~~~~~~~~~~~~~~~~
src/search.cpp:923:31: error: use of deleted function ‘stormphrax::Score stormphrax::search::Searcher::search(stormphrax::search::ThreadData&, const stormphrax::Position&, stormphrax::search::PvList&, stormphrax::i32, stormphrax::i32, stormphrax::u32, stormphrax::Score, stormphrax::Score, bool)’
  923 |                         search(thread, pos, curr.pv, sDepth, ply, moveStackIdx + 1, sBeta - 1, sBeta, cutnode);
      |                         ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/search.h:396:15: note: declared here
  396 |         Score search<false, true>(
      |               ^~~~~~~~~~~~~~~~~~~
src/search.cpp:923:31: error: use of deleted function ‘stormphrax::Score stormphrax::search::Searcher::search(stormphrax::search::ThreadData&, const stormphrax::Position&, stormphrax::search::PvList&, stormphrax::i32, stormphrax::i32, stormphrax::u32, stormphrax::Score, stormphrax::Score, bool)’
  923 |                         search(thread, pos, curr.pv, sDepth, ply, moveStackIdx + 1, sBeta - 1, sBeta, cutnode);
      |                         ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/search.h:396:15: note: declared here
  396 |         Score search<false, true>(
      |               ^~~~~~~~~~~~~~~~~~~
src/search.cpp:983:32: error: use of deleted function ‘stormphrax::Score stormphrax::search::Searcher::search(stormphrax::search::ThreadData&, const stormphrax::Position&, stormphrax::search::PvList&, stormphrax::i32, stormphrax::i32, stormphrax::u32, stormphrax::Score, stormphrax::Score, bool)’
  983 |                         -search(thread, newPos, curr.pv, reduced, ply + 1, moveStackIdx + 1, -alpha - 1, -alpha, true);
      |                          ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/search.h:396:15: note: declared here
  396 |         Score search<false, true>(
      |               ^~~~~~~~~~~~~~~~~~~
src/search.cpp:983:32: error: use of deleted function ‘stormphrax::Score stormphrax::search::Searcher::search(stormphrax::search::ThreadData&, const stormphrax::Position&, stormphrax::search::PvList&, stormphrax::i32, stormphrax::i32, stormphrax::u32, stormphrax::Score, stormphrax::Score, bool)’
  983 |                         -search(thread, newPos, curr.pv, reduced, ply + 1, moveStackIdx + 1, -alpha - 1, -alpha, true);
      |                          ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/search.h:396:15: note: declared here
  396 |         Score search<false, true>(
      |               ^~~~~~~~~~~~~~~~~~~
src/search.cpp:991:40: error: use of deleted function ‘stormphrax::Score stormphrax::search::Searcher::search(stormphrax::search::ThreadData&, const stormphrax::Position&, stormphrax::search::PvList&, stormphrax::i32, stormphrax::i32, stormphrax::u32, stormphrax::Score, stormphrax::Score, bool)’
  991 |                         score = -search(
      |                                  ~~~~~~^
  992 |                             thread,
      |                             ~~~~~~~     
  993 |                             newPos,
      |                             ~~~~~~~     
  994 |                             curr.pv,
      |                             ~~~~~~~~    
  995 |                             newDepth,
      |                             ~~~~~~~~~   
  996 |                             ply + 1,
      |                             ~~~~~~~~    
  997 |                             moveStackIdx + 1,
      |                             ~~~~~~~~~~~~~~~~~
  998 |                             -alpha - 1,
      |                             ~~~~~~~~~~~ 
  999 |                             -alpha,
      |                             ~~~~~~~     
 1000 |                             !cutnode
      |                             ~~~~~~~~    
 1001 |                         );
      |                         ~               
src/search.h:396:15: note: declared here
  396 |         Score search<false, true>(
      |               ^~~~~~~~~~~~~~~~~~~
src/search.cpp:991:40: error: use of deleted function ‘stormphrax::Score stormphrax::search::Searcher::search(stormphrax::search::ThreadData&, const stormphrax::Position&, stormphrax::search::PvList&, stormphrax::i32, stormphrax::i32, stormphrax::u32, stormphrax::Score, stormphrax::Score, bool)’
  991 |                         score = -search(
      |                                  ~~~~~~^
  992 |                             thread,
      |                             ~~~~~~~     
  993 |                             newPos,
      |                             ~~~~~~~     
  994 |                             curr.pv,
      |                             ~~~~~~~~    
  995 |                             newDepth,
      |                             ~~~~~~~~~   
  996 |                             ply + 1,
      |                             ~~~~~~~~    
  997 |                             moveStackIdx + 1,
      |                             ~~~~~~~~~~~~~~~~~
  998 |                             -alpha - 1,
      |                             ~~~~~~~~~~~ 
  999 |                             -alpha,
      |                             ~~~~~~~     
 1000 |                             !cutnode
      |                             ~~~~~~~~    
 1001 |                         );
      |                         ~               
src/search.h:396:15: note: declared here
  396 |         Score search<false, true>(
      |               ^~~~~~~~~~~~~~~~~~~
src/search.cpp:1014:36: error: use of deleted function ‘stormphrax::Score stormphrax::search::Searcher::search(stormphrax::search::ThreadData&, const stormphrax::Position&, stormphrax::search::PvList&, stormphrax::i32, stormphrax::i32, stormphrax::u32, stormphrax::Score, stormphrax::Score, bool)’
 1014 |                     score = -search(
      |                              ~~~~~~^
 1015 |                         thread,
      |                         ~~~~~~~     
 1016 |                         newPos,
      |                         ~~~~~~~     
 1017 |                         curr.pv,
      |                         ~~~~~~~~    
 1018 |                         newDepth,
      |                         ~~~~~~~~~   
 1019 |                         ply + 1,
      |                         ~~~~~~~~    
 1020 |                         moveStackIdx + 1,
      |                         ~~~~~~~~~~~~~~~~~
 1021 |                         -alpha - 1,
      |                         ~~~~~~~~~~~ 
 1022 |                         -alpha,
      |                         ~~~~~~~     
 1023 |                         !cutnode
      |                         ~~~~~~~~    
 1024 |                     );
      |                     ~               
src/search.h:396:15: note: declared here
  396 |         Score search<false, true>(
      |               ^~~~~~~~~~~~~~~~~~~
src/search.cpp:1014:36: error: use of deleted function ‘stormphrax::Score stormphrax::search::Searcher::search(stormphrax::search::ThreadData&, const stormphrax::Position&, stormphrax::search::PvList&, stormphrax::i32, stormphrax::i32, stormphrax::u32, stormphrax::Score, stormphrax::Score, bool)’
 1014 |                     score = -search(
      |                              ~~~~~~^
 1015 |                         thread,
      |                         ~~~~~~~     
 1016 |                         newPos,
      |                         ~~~~~~~     
 1017 |                         curr.pv,
      |                         ~~~~~~~~    
 1018 |                         newDepth,
      |                         ~~~~~~~~~   
 1019 |                         ply + 1,
      |                         ~~~~~~~~    
 1020 |                         moveStackIdx + 1,
      |                         ~~~~~~~~~~~~~~~~~
 1021 |                         -alpha - 1,
      |                         ~~~~~~~~~~~ 
 1022 |                         -alpha,
      |                         ~~~~~~~     
 1023 |                         !cutnode
      |                         ~~~~~~~~    
 1024 |                     );
      |                     ~               
src/search.h:396:15: note: declared here
  396 |         Score search<false, true>(
      |               ^~~~~~~~~~~~~~~~~~~
In file included from src/ttable.h:28,
                 from src/ttable.cpp:19:
src/arch.h:81:42: warning: use of ‘std::hardware_destructive_interference_size’ [-Winterference-size]
   81 |     constexpr auto kCacheLineSize = std::hardware_destructive_interference_size;
      |                                     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/arch.h:81:42: note: its value can vary between compiler versions or with different ‘-mtune’ or ‘-mcpu’ flags
src/arch.h:81:42: note: if this use is part of a public ABI, change it to instead use a constant variable you define
src/arch.h:81:42: note: the default value for the current CPU tuning is 64 bytes
src/arch.h:81:42: note: you can stabilize this value with ‘--param hardware_destructive_interference_size=64’, or disable this warning with ‘-Wno-interference-size’
In file included from src/eval/nnue/../../util/simd.h:25,
                 from src/eval/nnue/activation.h:29,
                 from src/eval/arch.h:25,
                 from src/eval/nnue.h:26,
                 from src/eval/nnue.cpp:19:
src/eval/nnue/../../util/../arch.h:81:42: warning: use of ‘std::hardware_destructive_interference_size’ [-Winterference-size]
   81 |     constexpr auto kCacheLineSize = std::hardware_destructive_interference_size;
      |                                     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/eval/nnue/../../util/../arch.h:81:42: note: its value can vary between compiler versions or with different ‘-mtune’ or ‘-mcpu’ flags
src/eval/nnue/../../util/../arch.h:81:42: note: if this use is part of a public ABI, change it to instead use a constant variable you define
src/eval/nnue/../../util/../arch.h:81:42: note: the default value for the current CPU tuning is 64 bytes
src/eval/nnue/../../util/../arch.h:81:42: note: you can stabilize this value with ‘--param hardware_destructive_interference_size=64’, or disable this warning with ‘-Wno-interference-size’
In file included from src/eval/nnue/arch/multilayer.h:31,
                 from src/eval/arch.h:26:
src/eval/nnue/arch/../io.h:34:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   34 |         template <>
      |                   ^
src/eval/nnue/arch/../io.h:35:21: error: template-id ‘read<stormphrax::i8>’ in declaration of primary template
   35 |         inline bool read<i8>(std::span<i8> dst) {
      |                     ^~~~~~~~
src/eval/nnue/arch/../io.h:39:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   39 |         template <>
      |                   ^
src/eval/nnue/arch/../io.h:40:21: error: template-id ‘read<stormphrax::i16>’ in declaration of primary template
   40 |         inline bool read<i16>(std::span<i16> dst) {
      |                     ^~~~~~~~~
src/eval/nnue/arch/../io.h:44:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   44 |         template <>
      |                   ^
src/eval/nnue/arch/../io.h:45:21: error: template-id ‘read<stormphrax::i32>’ in declaration of primary template
   45 |         inline bool read<i32>(std::span<i32> dst) {
      |                     ^~~~~~~~~
src/eval/nnue/arch/../io.h:57:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   57 |         template <>
      |                   ^
src/eval/nnue/arch/../io.h:58:21: error: template-id ‘write<stormphrax::i8>’ in declaration of primary template
   58 |         inline bool write<i8>(std::span<const i8> src) {
      |                     ^~~~~~~~~
src/eval/nnue/arch/../io.h:62:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   62 |         template <>
      |                   ^
src/eval/nnue/arch/../io.h:63:21: error: template-id ‘write<stormphrax::i16>’ in declaration of primary template
   63 |         inline bool write<i16>(std::span<const i16> src) {
      |                     ^~~~~~~~~~
src/eval/nnue/arch/../io.h:67:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   67 |         template <>
      |                   ^
src/eval/nnue/arch/../io.h:68:21: error: template-id ‘write<stormphrax::i32>’ in declaration of primary template
   68 |         inline bool write<i32>(std::span<const i32> src) {
      |                     ^~~~~~~~~~
src/eval/nnue/arch/multilayer.h: In member function ‘void stormphrax::eval::nnue::arch::PairwiseMultilayerCReLUSCReLUCReLU<kL1Size, kL2Size, kL3Size, kFtScaleBits, kFtQBits, kL1QBits, kDualActivation, OutputBucketing, kScale>::propagateL1(stormphrax::u32, std::span<const unsigned char, kL1Size>, std::span<int, kL2SizeFull>, const stormphrax::eval::nnue::arch::sparse::SparseContext<kL1Size>&) const’:
src/eval/nnue/arch/multilayer.h:156:87: warning: ignoring attributes on template argument ‘stormphrax::util::simd::Vector<int>’ {aka ‘__m256i’} [-Wignored-attributes]
  156 |             SP_SIMD_ALIGNAS util::MultiArray<Vector<i32>, kL2Size / kChunkSize<i32>, 4> intermediate{};
      |                                                                                       ^
In file included from src/eval/nnue.h:29:
src/eval/nnue/input.h: At global scope:
src/eval/nnue/input.h:338:15: warning: declaration of ‘using stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>::Accumulator = class stormphrax::eval::nnue::Accumulator<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet> >’ changes meaning of ‘Accumulator’ [-Wchanges-meaning]
  338 |         using Accumulator = Accumulator<FeatureTransformer<Type, kOutputs, FeatureSet>>;
      |               ^~~~~~~~~~~
src/eval/nnue/input.h:338:29: note: used here to mean ‘class stormphrax::eval::nnue::Accumulator<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet> >’
  338 |         using Accumulator = Accumulator<FeatureTransformer<Type, kOutputs, FeatureSet>>;
      |                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/eval/nnue/input.h:38:11: note: declared here
   38 |     class Accumulator {
      |           ^~~~~~~~~~~
src/eval/nnue/input.h:339:15: warning: declaration of ‘using stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>::RefreshTable = struct stormphrax::eval::nnue::RefreshTable<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>’ changes meaning of ‘RefreshTable’ [-Wchanges-meaning]
  339 |         using RefreshTable =
      |               ^~~~~~~~~~~~
src/eval/nnue/input.h:340:13: note: used here to mean ‘struct stormphrax::eval::nnue::RefreshTable<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>’
  340 |             RefreshTable<FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>;
      |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/eval/nnue/input.h:320:12: note: declared here
  320 |     struct RefreshTable {
      |            ^~~~~~~~~~~~
In file included from src/position/../attacks/../util/bits.h:26,
                 from src/position/../attacks/../bitboard.h:26,
                 from src/position/../attacks/attacks.h:26,
                 from src/position/position.h:31,
                 from src/perft.h:24,
                 from src/perft.cpp:19:
src/position/../attacks/../util/../arch.h:81:42: warning: use of ‘std::hardware_destructive_interference_size’ [-Winterference-size]
   81 |     constexpr auto kCacheLineSize = std::hardware_destructive_interference_size;
      |                                     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/position/../attacks/../util/../arch.h:81:42: note: its value can vary between compiler versions or with different ‘-mtune’ or ‘-mcpu’ flags
src/position/../attacks/../util/../arch.h:81:42: note: if this use is part of a public ABI, change it to instead use a constant variable you define
src/position/../attacks/../util/../arch.h:81:42: note: the default value for the current CPU tuning is 64 bytes
src/position/../attacks/../util/../arch.h:81:42: note: you can stabilize this value with ‘--param hardware_destructive_interference_size=64’, or disable this warning with ‘-Wno-interference-size’
In file included from src/position/../eval/nnue/arch/multilayer.h:31,
                 from src/position/../eval/arch.h:26,
                 from src/position/../eval/nnue.h:26,
                 from src/position/position.h:32:
src/position/../eval/nnue/arch/../io.h:34:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   34 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:35:21: error: template-id ‘read<stormphrax::i8>’ in declaration of primary template
   35 |         inline bool read<i8>(std::span<i8> dst) {
      |                     ^~~~~~~~
src/position/../eval/nnue/arch/../io.h:39:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   39 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:40:21: error: template-id ‘read<stormphrax::i16>’ in declaration of primary template
   40 |         inline bool read<i16>(std::span<i16> dst) {
      |                     ^~~~~~~~~
src/position/../eval/nnue/arch/../io.h:44:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   44 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:45:21: error: template-id ‘read<stormphrax::i32>’ in declaration of primary template
   45 |         inline bool read<i32>(std::span<i32> dst) {
      |                     ^~~~~~~~~
src/position/../eval/nnue/arch/../io.h:57:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   57 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:58:21: error: template-id ‘write<stormphrax::i8>’ in declaration of primary template
   58 |         inline bool write<i8>(std::span<const i8> src) {
      |                     ^~~~~~~~~
src/position/../eval/nnue/arch/../io.h:62:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   62 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:63:21: error: template-id ‘write<stormphrax::i16>’ in declaration of primary template
   63 |         inline bool write<i16>(std::span<const i16> src) {
      |                     ^~~~~~~~~~
src/position/../eval/nnue/arch/../io.h:67:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   67 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:68:21: error: template-id ‘write<stormphrax::i32>’ in declaration of primary template
   68 |         inline bool write<i32>(std::span<const i32> src) {
      |                     ^~~~~~~~~~
src/position/../eval/nnue/arch/multilayer.h: In member function ‘void stormphrax::eval::nnue::arch::PairwiseMultilayerCReLUSCReLUCReLU<kL1Size, kL2Size, kL3Size, kFtScaleBits, kFtQBits, kL1QBits, kDualActivation, OutputBucketing, kScale>::propagateL1(stormphrax::u32, std::span<const unsigned char, kL1Size>, std::span<int, kL2SizeFull>, const stormphrax::eval::nnue::arch::sparse::SparseContext<kL1Size>&) const’:
src/position/../eval/nnue/arch/multilayer.h:156:87: warning: ignoring attributes on template argument ‘stormphrax::util::simd::Vector<int>’ {aka ‘__m256i’} [-Wignored-attributes]
  156 |             SP_SIMD_ALIGNAS util::MultiArray<Vector<i32>, kL2Size / kChunkSize<i32>, 4> intermediate{};
      |                                                                                       ^
In file included from src/position/../eval/nnue.h:29:
src/position/../eval/nnue/input.h: At global scope:
src/position/../eval/nnue/input.h:338:15: warning: declaration of ‘using stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>::Accumulator = class stormphrax::eval::nnue::Accumulator<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet> >’ changes meaning of ‘Accumulator’ [-Wchanges-meaning]
  338 |         using Accumulator = Accumulator<FeatureTransformer<Type, kOutputs, FeatureSet>>;
      |               ^~~~~~~~~~~
src/position/../eval/nnue/input.h:338:29: note: used here to mean ‘class stormphrax::eval::nnue::Accumulator<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet> >’
  338 |         using Accumulator = Accumulator<FeatureTransformer<Type, kOutputs, FeatureSet>>;
      |                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/position/../eval/nnue/input.h:38:11: note: declared here
   38 |     class Accumulator {
      |           ^~~~~~~~~~~
src/position/../eval/nnue/input.h:339:15: warning: declaration of ‘using stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>::RefreshTable = struct stormphrax::eval::nnue::RefreshTable<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>’ changes meaning of ‘RefreshTable’ [-Wchanges-meaning]
  339 |         using RefreshTable =
      |               ^~~~~~~~~~~~
src/position/../eval/nnue/input.h:340:13: note: used here to mean ‘struct stormphrax::eval::nnue::RefreshTable<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>’
  340 |             RefreshTable<FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>;
      |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/position/../eval/nnue/input.h:320:12: note: declared here
  320 |     struct RefreshTable {
      |            ^~~~~~~~~~~~
In file included from src/position/../attacks/../util/bits.h:26,
                 from src/position/../attacks/../bitboard.h:26,
                 from src/position/../attacks/attacks.h:26,
                 from src/position/position.h:31,
                 from src/correction.h:27,
                 from src/search.h:37,
                 from src/bench.h:23,
                 from src/bench.cpp:19:
src/position/../attacks/../util/../arch.h:81:42: warning: use of ‘std::hardware_destructive_interference_size’ [-Winterference-size]
   81 |     constexpr auto kCacheLineSize = std::hardware_destructive_interference_size;
      |                                     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/position/../attacks/../util/../arch.h:81:42: note: its value can vary between compiler versions or with different ‘-mtune’ or ‘-mcpu’ flags
src/position/../attacks/../util/../arch.h:81:42: note: if this use is part of a public ABI, change it to instead use a constant variable you define
src/position/../attacks/../util/../arch.h:81:42: note: the default value for the current CPU tuning is 64 bytes
src/position/../attacks/../util/../arch.h:81:42: note: you can stabilize this value with ‘--param hardware_destructive_interference_size=64’, or disable this warning with ‘-Wno-interference-size’
In file included from src/position/../eval/nnue/arch/multilayer.h:31,
                 from src/position/../eval/arch.h:26,
                 from src/position/../eval/nnue.h:26,
                 from src/position/position.h:32:
src/position/../eval/nnue/arch/../io.h:34:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   34 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:35:21: error: template-id ‘read<stormphrax::i8>’ in declaration of primary template
   35 |         inline bool read<i8>(std::span<i8> dst) {
      |                     ^~~~~~~~
src/position/../eval/nnue/arch/../io.h:39:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   39 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:40:21: error: template-id ‘read<stormphrax::i16>’ in declaration of primary template
   40 |         inline bool read<i16>(std::span<i16> dst) {
      |                     ^~~~~~~~~
src/position/../eval/nnue/arch/../io.h:44:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   44 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:45:21: error: template-id ‘read<stormphrax::i32>’ in declaration of primary template
   45 |         inline bool read<i32>(std::span<i32> dst) {
      |                     ^~~~~~~~~
src/position/../eval/nnue/arch/../io.h:57:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   57 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:58:21: error: template-id ‘write<stormphrax::i8>’ in declaration of primary template
   58 |         inline bool write<i8>(std::span<const i8> src) {
      |                     ^~~~~~~~~
src/position/../eval/nnue/arch/../io.h:62:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   62 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:63:21: error: template-id ‘write<stormphrax::i16>’ in declaration of primary template
   63 |         inline bool write<i16>(std::span<const i16> src) {
      |                     ^~~~~~~~~~
src/position/../eval/nnue/arch/../io.h:67:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   67 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:68:21: error: template-id ‘write<stormphrax::i32>’ in declaration of primary template
   68 |         inline bool write<i32>(std::span<const i32> src) {
      |                     ^~~~~~~~~~
src/position/../eval/nnue/arch/multilayer.h: In member function ‘void stormphrax::eval::nnue::arch::PairwiseMultilayerCReLUSCReLUCReLU<kL1Size, kL2Size, kL3Size, kFtScaleBits, kFtQBits, kL1QBits, kDualActivation, OutputBucketing, kScale>::propagateL1(stormphrax::u32, std::span<const unsigned char, kL1Size>, std::span<int, kL2SizeFull>, const stormphrax::eval::nnue::arch::sparse::SparseContext<kL1Size>&) const’:
src/position/../eval/nnue/arch/multilayer.h:156:87: warning: ignoring attributes on template argument ‘stormphrax::util::simd::Vector<int>’ {aka ‘__m256i’} [-Wignored-attributes]
  156 |             SP_SIMD_ALIGNAS util::MultiArray<Vector<i32>, kL2Size / kChunkSize<i32>, 4> intermediate{};
      |                                                                                       ^
In file included from src/position/../eval/nnue.h:29:
src/position/../eval/nnue/input.h: At global scope:
src/position/../eval/nnue/input.h:338:15: warning: declaration of ‘using stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>::Accumulator = class stormphrax::eval::nnue::Accumulator<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet> >’ changes meaning of ‘Accumulator’ [-Wchanges-meaning]
  338 |         using Accumulator = Accumulator<FeatureTransformer<Type, kOutputs, FeatureSet>>;
      |               ^~~~~~~~~~~
src/position/../eval/nnue/input.h:338:29: note: used here to mean ‘class stormphrax::eval::nnue::Accumulator<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet> >’
  338 |         using Accumulator = Accumulator<FeatureTransformer<Type, kOutputs, FeatureSet>>;
      |                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/position/../eval/nnue/input.h:38:11: note: declared here
   38 |     class Accumulator {
      |           ^~~~~~~~~~~
src/position/../eval/nnue/input.h:339:15: warning: declaration of ‘using stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>::RefreshTable = struct stormphrax::eval::nnue::RefreshTable<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>’ changes meaning of ‘RefreshTable’ [-Wchanges-meaning]
  339 |         using RefreshTable =
      |               ^~~~~~~~~~~~
src/position/../eval/nnue/input.h:340:13: note: used here to mean ‘struct stormphrax::eval::nnue::RefreshTable<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>’
  340 |             RefreshTable<FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>;
      |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/position/../eval/nnue/input.h:320:12: note: declared here
  320 |     struct RefreshTable {
      |            ^~~~~~~~~~~~
src/search.h:395:19: error: explicit specialization in non-namespace scope ‘class stormphrax::search::Searcher’
  395 |         template <>
      |                   ^
src/search.h:396:15: error: template-id ‘search<false, true>’ in declaration of primary template
  396 |         Score search<false, true>(
      |               ^~~~~~~~~~~~~~~~~~~
In file included from src/3rdparty/pyrrhic/../../util/bits.h:26,
                 from src/3rdparty/pyrrhic/tbconfig.h:28,
                 from src/3rdparty/pyrrhic/tbprobe.h:32,
                 from src/3rdparty/pyrrhic/tbprobe.cpp:39:
src/3rdparty/pyrrhic/../../util/../arch.h:81:42: warning: use of ‘std::hardware_destructive_interference_size’ [-Winterference-size]
   81 |     constexpr auto kCacheLineSize = std::hardware_destructive_interference_size;
      |                                     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/3rdparty/pyrrhic/../../util/../arch.h:81:42: note: its value can vary between compiler versions or with different ‘-mtune’ or ‘-mcpu’ flags
src/3rdparty/pyrrhic/../../util/../arch.h:81:42: note: if this use is part of a public ABI, change it to instead use a constant variable you define
src/3rdparty/pyrrhic/../../util/../arch.h:81:42: note: the default value for the current CPU tuning is 64 bytes
src/3rdparty/pyrrhic/../../util/../arch.h:81:42: note: you can stabilize this value with ‘--param hardware_destructive_interference_size=64’, or disable this warning with ‘-Wno-interference-size’
In file included from src/3rdparty/pyrrhic/../../position/../eval/nnue/arch/multilayer.h:31,
                 from src/3rdparty/pyrrhic/../../position/../eval/arch.h:26,
                 from src/3rdparty/pyrrhic/../../position/../eval/nnue.h:26,
                 from src/3rdparty/pyrrhic/../../position/position.h:32,
                 from src/3rdparty/pyrrhic/../../correction.h:27,
                 from src/3rdparty/pyrrhic/../../search.h:37,
                 from src/3rdparty/pyrrhic/tbconfig.h:30:
src/3rdparty/pyrrhic/../../position/../eval/nnue/arch/../io.h:34:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   34 |         template <>
      |                   ^
src/3rdparty/pyrrhic/../../position/../eval/nnue/arch/../io.h:35:21: error: template-id ‘read<stormphrax::i8>’ in declaration of primary template
   35 |         inline bool read<i8>(std::span<i8> dst) {
      |                     ^~~~~~~~
src/3rdparty/pyrrhic/../../position/../eval/nnue/arch/../io.h:39:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   39 |         template <>
      |                   ^
src/3rdparty/pyrrhic/../../position/../eval/nnue/arch/../io.h:40:21: error: template-id ‘read<stormphrax::i16>’ in declaration of primary template
   40 |         inline bool read<i16>(std::span<i16> dst) {
      |                     ^~~~~~~~~
src/3rdparty/pyrrhic/../../position/../eval/nnue/arch/../io.h:44:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   44 |         template <>
      |                   ^
src/3rdparty/pyrrhic/../../position/../eval/nnue/arch/../io.h:45:21: error: template-id ‘read<stormphrax::i32>’ in declaration of primary template
   45 |         inline bool read<i32>(std::span<i32> dst) {
      |                     ^~~~~~~~~
src/3rdparty/pyrrhic/../../position/../eval/nnue/arch/../io.h:57:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   57 |         template <>
      |                   ^
src/3rdparty/pyrrhic/../../position/../eval/nnue/arch/../io.h:58:21: error: template-id ‘write<stormphrax::i8>’ in declaration of primary template
   58 |         inline bool write<i8>(std::span<const i8> src) {
      |                     ^~~~~~~~~
src/3rdparty/pyrrhic/../../position/../eval/nnue/arch/../io.h:62:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   62 |         template <>
      |                   ^
src/3rdparty/pyrrhic/../../position/../eval/nnue/arch/../io.h:63:21: error: template-id ‘write<stormphrax::i16>’ in declaration of primary template
   63 |         inline bool write<i16>(std::span<const i16> src) {
      |                     ^~~~~~~~~~
src/3rdparty/pyrrhic/../../position/../eval/nnue/arch/../io.h:67:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   67 |         template <>
      |                   ^
src/3rdparty/pyrrhic/../../position/../eval/nnue/arch/../io.h:68:21: error: template-id ‘write<stormphrax::i32>’ in declaration of primary template
   68 |         inline bool write<i32>(std::span<const i32> src) {
      |                     ^~~~~~~~~~
src/3rdparty/pyrrhic/../../position/../eval/nnue/arch/multilayer.h: In member function ‘void stormphrax::eval::nnue::arch::PairwiseMultilayerCReLUSCReLUCReLU<kL1Size, kL2Size, kL3Size, kFtScaleBits, kFtQBits, kL1QBits, kDualActivation, OutputBucketing, kScale>::propagateL1(stormphrax::u32, std::span<const unsigned char, kL1Size>, std::span<int, kL2SizeFull>, const stormphrax::eval::nnue::arch::sparse::SparseContext<kL1Size>&) const’:
src/3rdparty/pyrrhic/../../position/../eval/nnue/arch/multilayer.h:156:87: warning: ignoring attributes on template argument ‘stormphrax::util::simd::Vector<int>’ {aka ‘__m256i’} [-Wignored-attributes]
  156 |             SP_SIMD_ALIGNAS util::MultiArray<Vector<i32>, kL2Size / kChunkSize<i32>, 4> intermediate{};
      |                                                                                       ^
In file included from src/3rdparty/pyrrhic/../../position/../eval/nnue.h:29:
src/3rdparty/pyrrhic/../../position/../eval/nnue/input.h: At global scope:
src/3rdparty/pyrrhic/../../position/../eval/nnue/input.h:338:15: warning: declaration of ‘using stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>::Accumulator = class stormphrax::eval::nnue::Accumulator<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet> >’ changes meaning of ‘Accumulator’ [-Wchanges-meaning]
  338 |         using Accumulator = Accumulator<FeatureTransformer<Type, kOutputs, FeatureSet>>;
      |               ^~~~~~~~~~~
src/3rdparty/pyrrhic/../../position/../eval/nnue/input.h:338:29: note: used here to mean ‘class stormphrax::eval::nnue::Accumulator<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet> >’
  338 |         using Accumulator = Accumulator<FeatureTransformer<Type, kOutputs, FeatureSet>>;
      |                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/3rdparty/pyrrhic/../../position/../eval/nnue/input.h:38:11: note: declared here
   38 |     class Accumulator {
      |           ^~~~~~~~~~~
src/3rdparty/pyrrhic/../../position/../eval/nnue/input.h:339:15: warning: declaration of ‘using stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>::RefreshTable = struct stormphrax::eval::nnue::RefreshTable<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>’ changes meaning of ‘RefreshTable’ [-Wchanges-meaning]
  339 |         using RefreshTable =
      |               ^~~~~~~~~~~~
src/3rdparty/pyrrhic/../../position/../eval/nnue/input.h:340:13: note: used here to mean ‘struct stormphrax::eval::nnue::RefreshTable<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>’
  340 |             RefreshTable<FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>;
      |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/3rdparty/pyrrhic/../../position/../eval/nnue/input.h:320:12: note: declared here
  320 |     struct RefreshTable {
      |            ^~~~~~~~~~~~
src/3rdparty/pyrrhic/../../search.h:395:19: error: explicit specialization in non-namespace scope ‘class stormphrax::search::Searcher’
  395 |         template <>
      |                   ^
src/3rdparty/pyrrhic/../../search.h:396:15: error: template-id ‘search<false, true>’ in declaration of primary template
  396 |         Score search<false, true>(
      |               ^~~~~~~~~~~~~~~~~~~
In file included from src/datagen/../3rdparty/pyrrhic/../../util/bits.h:26,
                 from src/datagen/../3rdparty/pyrrhic/tbconfig.h:28,
                 from src/datagen/../3rdparty/pyrrhic/tbprobe.h:32,
                 from src/datagen/datagen.cpp:31:
src/datagen/../3rdparty/pyrrhic/../../util/../arch.h:81:42: warning: use of ‘std::hardware_destructive_interference_size’ [-Winterference-size]
   81 |     constexpr auto kCacheLineSize = std::hardware_destructive_interference_size;
      |                                     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/datagen/../3rdparty/pyrrhic/../../util/../arch.h:81:42: note: its value can vary between compiler versions or with different ‘-mtune’ or ‘-mcpu’ flags
src/datagen/../3rdparty/pyrrhic/../../util/../arch.h:81:42: note: if this use is part of a public ABI, change it to instead use a constant variable you define
src/datagen/../3rdparty/pyrrhic/../../util/../arch.h:81:42: note: the default value for the current CPU tuning is 64 bytes
src/datagen/../3rdparty/pyrrhic/../../util/../arch.h:81:42: note: you can stabilize this value with ‘--param hardware_destructive_interference_size=64’, or disable this warning with ‘-Wno-interference-size’
In file included from src/datagen/../3rdparty/pyrrhic/../../position/../eval/nnue/arch/multilayer.h:31,
                 from src/datagen/../3rdparty/pyrrhic/../../position/../eval/arch.h:26,
                 from src/datagen/../3rdparty/pyrrhic/../../position/../eval/nnue.h:26,
                 from src/datagen/../3rdparty/pyrrhic/../../position/position.h:32,
                 from src/datagen/../3rdparty/pyrrhic/../../correction.h:27,
                 from src/datagen/../3rdparty/pyrrhic/../../search.h:37,
                 from src/datagen/../3rdparty/pyrrhic/tbconfig.h:30:
src/datagen/../3rdparty/pyrrhic/../../position/../eval/nnue/arch/../io.h:34:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   34 |         template <>
      |                   ^
src/datagen/../3rdparty/pyrrhic/../../position/../eval/nnue/arch/../io.h:35:21: error: template-id ‘read<stormphrax::i8>’ in declaration of primary template
   35 |         inline bool read<i8>(std::span<i8> dst) {
      |                     ^~~~~~~~
src/datagen/../3rdparty/pyrrhic/../../position/../eval/nnue/arch/../io.h:39:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   39 |         template <>
      |                   ^
src/datagen/../3rdparty/pyrrhic/../../position/../eval/nnue/arch/../io.h:40:21: error: template-id ‘read<stormphrax::i16>’ in declaration of primary template
   40 |         inline bool read<i16>(std::span<i16> dst) {
      |                     ^~~~~~~~~
src/datagen/../3rdparty/pyrrhic/../../position/../eval/nnue/arch/../io.h:44:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   44 |         template <>
      |                   ^
src/datagen/../3rdparty/pyrrhic/../../position/../eval/nnue/arch/../io.h:45:21: error: template-id ‘read<stormphrax::i32>’ in declaration of primary template
   45 |         inline bool read<i32>(std::span<i32> dst) {
      |                     ^~~~~~~~~
src/datagen/../3rdparty/pyrrhic/../../position/../eval/nnue/arch/../io.h:57:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   57 |         template <>
      |                   ^
src/datagen/../3rdparty/pyrrhic/../../position/../eval/nnue/arch/../io.h:58:21: error: template-id ‘write<stormphrax::i8>’ in declaration of primary template
   58 |         inline bool write<i8>(std::span<const i8> src) {
      |                     ^~~~~~~~~
src/datagen/../3rdparty/pyrrhic/../../position/../eval/nnue/arch/../io.h:62:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   62 |         template <>
      |                   ^
src/datagen/../3rdparty/pyrrhic/../../position/../eval/nnue/arch/../io.h:63:21: error: template-id ‘write<stormphrax::i16>’ in declaration of primary template
   63 |         inline bool write<i16>(std::span<const i16> src) {
      |                     ^~~~~~~~~~
src/datagen/../3rdparty/pyrrhic/../../position/../eval/nnue/arch/../io.h:67:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   67 |         template <>
      |                   ^
src/datagen/../3rdparty/pyrrhic/../../position/../eval/nnue/arch/../io.h:68:21: error: template-id ‘write<stormphrax::i32>’ in declaration of primary template
   68 |         inline bool write<i32>(std::span<const i32> src) {
      |                     ^~~~~~~~~~
src/datagen/../3rdparty/pyrrhic/../../position/../eval/nnue/arch/multilayer.h: In member function ‘void stormphrax::eval::nnue::arch::PairwiseMultilayerCReLUSCReLUCReLU<kL1Size, kL2Size, kL3Size, kFtScaleBits, kFtQBits, kL1QBits, kDualActivation, OutputBucketing, kScale>::propagateL1(stormphrax::u32, std::span<const unsigned char, kL1Size>, std::span<int, kL2SizeFull>, const stormphrax::eval::nnue::arch::sparse::SparseContext<kL1Size>&) const’:
src/datagen/../3rdparty/pyrrhic/../../position/../eval/nnue/arch/multilayer.h:156:87: warning: ignoring attributes on template argument ‘stormphrax::util::simd::Vector<int>’ {aka ‘__m256i’} [-Wignored-attributes]
  156 |             SP_SIMD_ALIGNAS util::MultiArray<Vector<i32>, kL2Size / kChunkSize<i32>, 4> intermediate{};
      |                                                                                       ^
In file included from src/datagen/../3rdparty/pyrrhic/../../position/../eval/nnue.h:29:
src/datagen/../3rdparty/pyrrhic/../../position/../eval/nnue/input.h: At global scope:
src/datagen/../3rdparty/pyrrhic/../../position/../eval/nnue/input.h:338:15: warning: declaration of ‘using stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>::Accumulator = class stormphrax::eval::nnue::Accumulator<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet> >’ changes meaning of ‘Accumulator’ [-Wchanges-meaning]
  338 |         using Accumulator = Accumulator<FeatureTransformer<Type, kOutputs, FeatureSet>>;
      |               ^~~~~~~~~~~
src/datagen/../3rdparty/pyrrhic/../../position/../eval/nnue/input.h:338:29: note: used here to mean ‘class stormphrax::eval::nnue::Accumulator<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet> >’
  338 |         using Accumulator = Accumulator<FeatureTransformer<Type, kOutputs, FeatureSet>>;
      |                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/datagen/../3rdparty/pyrrhic/../../position/../eval/nnue/input.h:38:11: note: declared here
   38 |     class Accumulator {
      |           ^~~~~~~~~~~
src/datagen/../3rdparty/pyrrhic/../../position/../eval/nnue/input.h:339:15: warning: declaration of ‘using stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>::RefreshTable = struct stormphrax::eval::nnue::RefreshTable<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>’ changes meaning of ‘RefreshTable’ [-Wchanges-meaning]
  339 |         using RefreshTable =
      |               ^~~~~~~~~~~~
src/datagen/../3rdparty/pyrrhic/../../position/../eval/nnue/input.h:340:13: note: used here to mean ‘struct stormphrax::eval::nnue::RefreshTable<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>’
  340 |             RefreshTable<FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>;
      |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/datagen/../3rdparty/pyrrhic/../../position/../eval/nnue/input.h:320:12: note: declared here
  320 |     struct RefreshTable {
      |            ^~~~~~~~~~~~
src/datagen/../3rdparty/pyrrhic/../../search.h:395:19: error: explicit specialization in non-namespace scope ‘class stormphrax::search::Searcher’
  395 |         template <>
      |                   ^
src/datagen/../3rdparty/pyrrhic/../../search.h:396:15: error: template-id ‘search<false, true>’ in declaration of primary template
  396 |         Score search<false, true>(
      |               ^~~~~~~~~~~~~~~~~~~
In file included from src/datagen/datagen.cpp:42:
src/datagen/marlinformat.h:34:31: warning: ignoring packed attribute because of unpacked non-POD field ‘stormphrax::util::U4Array<32> stormphrax::datagen::marlinformat::PackedBoard::pieces’
   34 |             util::U4Array<32> pieces;
      |                               ^~~~~~
src/datagen/datagen.cpp: In function ‘std::optional<stormphrax::datagen::Outcome> stormphrax::datagen::{anonymous}::probeTb(const stormphrax::Position&)’:
src/datagen/datagen.cpp:111:9: warning: control reaches end of non-void function [-Wreturn-type]
  111 |         }
      |         ^
In file included from src/attacks/../util/bits.h:26,
                 from src/attacks/../bitboard.h:26,
                 from src/attacks/attacks.h:26,
                 from src/cuckoo.cpp:24:
src/attacks/../util/../arch.h:81:42: warning: use of ‘std::hardware_destructive_interference_size’ [-Winterference-size]
   81 |     constexpr auto kCacheLineSize = std::hardware_destructive_interference_size;
      |                                     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/attacks/../util/../arch.h:81:42: note: its value can vary between compiler versions or with different ‘-mtune’ or ‘-mcpu’ flags
src/attacks/../util/../arch.h:81:42: note: if this use is part of a public ABI, change it to instead use a constant variable you define
src/attacks/../util/../arch.h:81:42: note: the default value for the current CPU tuning is 64 bytes
src/attacks/../util/../arch.h:81:42: note: you can stabilize this value with ‘--param hardware_destructive_interference_size=64’, or disable this warning with ‘-Wno-interference-size’
In file included from src/datagen/../position/../attacks/../util/bits.h:26,
                 from src/datagen/../position/../attacks/../bitboard.h:26,
                 from src/datagen/../position/../attacks/attacks.h:26,
                 from src/datagen/../position/position.h:31,
                 from src/datagen/marlinformat.h:25,
                 from src/datagen/marlinformat.cpp:19:
src/datagen/../position/../attacks/../util/../arch.h:81:42: warning: use of ‘std::hardware_destructive_interference_size’ [-Winterference-size]
   81 |     constexpr auto kCacheLineSize = std::hardware_destructive_interference_size;
      |                                     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/datagen/../position/../attacks/../util/../arch.h:81:42: note: its value can vary between compiler versions or with different ‘-mtune’ or ‘-mcpu’ flags
src/datagen/../position/../attacks/../util/../arch.h:81:42: note: if this use is part of a public ABI, change it to instead use a constant variable you define
src/datagen/../position/../attacks/../util/../arch.h:81:42: note: the default value for the current CPU tuning is 64 bytes
src/datagen/../position/../attacks/../util/../arch.h:81:42: note: you can stabilize this value with ‘--param hardware_destructive_interference_size=64’, or disable this warning with ‘-Wno-interference-size’
In file included from src/datagen/../position/../eval/nnue/arch/multilayer.h:31,
                 from src/datagen/../position/../eval/arch.h:26,
                 from src/datagen/../position/../eval/nnue.h:26,
                 from src/datagen/../position/position.h:32:
src/datagen/../position/../eval/nnue/arch/../io.h:34:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   34 |         template <>
      |                   ^
src/datagen/../position/../eval/nnue/arch/../io.h:35:21: error: template-id ‘read<stormphrax::i8>’ in declaration of primary template
   35 |         inline bool read<i8>(std::span<i8> dst) {
      |                     ^~~~~~~~
src/datagen/../position/../eval/nnue/arch/../io.h:39:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   39 |         template <>
      |                   ^
src/datagen/../position/../eval/nnue/arch/../io.h:40:21: error: template-id ‘read<stormphrax::i16>’ in declaration of primary template
   40 |         inline bool read<i16>(std::span<i16> dst) {
      |                     ^~~~~~~~~
src/datagen/../position/../eval/nnue/arch/../io.h:44:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   44 |         template <>
      |                   ^
src/datagen/../position/../eval/nnue/arch/../io.h:45:21: error: template-id ‘read<stormphrax::i32>’ in declaration of primary template
   45 |         inline bool read<i32>(std::span<i32> dst) {
      |                     ^~~~~~~~~
src/datagen/../position/../eval/nnue/arch/../io.h:57:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   57 |         template <>
      |                   ^
src/datagen/../position/../eval/nnue/arch/../io.h:58:21: error: template-id ‘write<stormphrax::i8>’ in declaration of primary template
   58 |         inline bool write<i8>(std::span<const i8> src) {
      |                     ^~~~~~~~~
src/datagen/../position/../eval/nnue/arch/../io.h:62:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   62 |         template <>
      |                   ^
src/datagen/../position/../eval/nnue/arch/../io.h:63:21: error: template-id ‘write<stormphrax::i16>’ in declaration of primary template
   63 |         inline bool write<i16>(std::span<const i16> src) {
      |                     ^~~~~~~~~~
src/datagen/../position/../eval/nnue/arch/../io.h:67:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   67 |         template <>
      |                   ^
src/datagen/../position/../eval/nnue/arch/../io.h:68:21: error: template-id ‘write<stormphrax::i32>’ in declaration of primary template
   68 |         inline bool write<i32>(std::span<const i32> src) {
      |                     ^~~~~~~~~~
src/datagen/../position/../eval/nnue/arch/multilayer.h: In member function ‘void stormphrax::eval::nnue::arch::PairwiseMultilayerCReLUSCReLUCReLU<kL1Size, kL2Size, kL3Size, kFtScaleBits, kFtQBits, kL1QBits, kDualActivation, OutputBucketing, kScale>::propagateL1(stormphrax::u32, std::span<const unsigned char, kL1Size>, std::span<int, kL2SizeFull>, const stormphrax::eval::nnue::arch::sparse::SparseContext<kL1Size>&) const’:
src/datagen/../position/../eval/nnue/arch/multilayer.h:156:87: warning: ignoring attributes on template argument ‘stormphrax::util::simd::Vector<int>’ {aka ‘__m256i’} [-Wignored-attributes]
  156 |             SP_SIMD_ALIGNAS util::MultiArray<Vector<i32>, kL2Size / kChunkSize<i32>, 4> intermediate{};
      |                                                                                       ^
In file included from src/datagen/../position/../eval/nnue.h:29:
src/datagen/../position/../eval/nnue/input.h: At global scope:
src/datagen/../position/../eval/nnue/input.h:338:15: warning: declaration of ‘using stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>::Accumulator = class stormphrax::eval::nnue::Accumulator<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet> >’ changes meaning of ‘Accumulator’ [-Wchanges-meaning]
  338 |         using Accumulator = Accumulator<FeatureTransformer<Type, kOutputs, FeatureSet>>;
      |               ^~~~~~~~~~~
src/datagen/../position/../eval/nnue/input.h:338:29: note: used here to mean ‘class stormphrax::eval::nnue::Accumulator<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet> >’
  338 |         using Accumulator = Accumulator<FeatureTransformer<Type, kOutputs, FeatureSet>>;
      |                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/datagen/../position/../eval/nnue/input.h:38:11: note: declared here
   38 |     class Accumulator {
      |           ^~~~~~~~~~~
src/datagen/../position/../eval/nnue/input.h:339:15: warning: declaration of ‘using stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>::RefreshTable = struct stormphrax::eval::nnue::RefreshTable<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>’ changes meaning of ‘RefreshTable’ [-Wchanges-meaning]
  339 |         using RefreshTable =
      |               ^~~~~~~~~~~~
src/datagen/../position/../eval/nnue/input.h:340:13: note: used here to mean ‘struct stormphrax::eval::nnue::RefreshTable<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>’
  340 |             RefreshTable<FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>;
      |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/datagen/../position/../eval/nnue/input.h:320:12: note: declared here
  320 |     struct RefreshTable {
      |            ^~~~~~~~~~~~
src/datagen/marlinformat.h:34:31: warning: ignoring packed attribute because of unpacked non-POD field ‘stormphrax::util::U4Array<32> stormphrax::datagen::marlinformat::PackedBoard::pieces’
   34 |             util::U4Array<32> pieces;
      |                               ^~~~~~
In file included from src/datagen/../position/../attacks/../util/bits.h:26,
                 from src/datagen/../position/../attacks/../bitboard.h:26,
                 from src/datagen/../position/../attacks/attacks.h:26,
                 from src/datagen/../position/position.h:31,
                 from src/datagen/format.h:29,
                 from src/datagen/viriformat.h:24,
                 from src/datagen/viriformat.cpp:19:
src/datagen/../position/../attacks/../util/../arch.h:81:42: warning: use of ‘std::hardware_destructive_interference_size’ [-Winterference-size]
   81 |     constexpr auto kCacheLineSize = std::hardware_destructive_interference_size;
      |                                     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/datagen/../position/../attacks/../util/../arch.h:81:42: note: its value can vary between compiler versions or with different ‘-mtune’ or ‘-mcpu’ flags
src/datagen/../position/../attacks/../util/../arch.h:81:42: note: if this use is part of a public ABI, change it to instead use a constant variable you define
src/datagen/../position/../attacks/../util/../arch.h:81:42: note: the default value for the current CPU tuning is 64 bytes
src/datagen/../position/../attacks/../util/../arch.h:81:42: note: you can stabilize this value with ‘--param hardware_destructive_interference_size=64’, or disable this warning with ‘-Wno-interference-size’
In file included from src/datagen/../position/../eval/nnue/arch/multilayer.h:31,
                 from src/datagen/../position/../eval/arch.h:26,
                 from src/datagen/../position/../eval/nnue.h:26,
                 from src/datagen/../position/position.h:32:
src/datagen/../position/../eval/nnue/arch/../io.h:34:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   34 |         template <>
      |                   ^
src/datagen/../position/../eval/nnue/arch/../io.h:35:21: error: template-id ‘read<stormphrax::i8>’ in declaration of primary template
   35 |         inline bool read<i8>(std::span<i8> dst) {
      |                     ^~~~~~~~
src/datagen/../position/../eval/nnue/arch/../io.h:39:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   39 |         template <>
      |                   ^
src/datagen/../position/../eval/nnue/arch/../io.h:40:21: error: template-id ‘read<stormphrax::i16>’ in declaration of primary template
   40 |         inline bool read<i16>(std::span<i16> dst) {
      |                     ^~~~~~~~~
src/datagen/../position/../eval/nnue/arch/../io.h:44:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   44 |         template <>
      |                   ^
src/datagen/../position/../eval/nnue/arch/../io.h:45:21: error: template-id ‘read<stormphrax::i32>’ in declaration of primary template
   45 |         inline bool read<i32>(std::span<i32> dst) {
      |                     ^~~~~~~~~
src/datagen/../position/../eval/nnue/arch/../io.h:57:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   57 |         template <>
      |                   ^
src/datagen/../position/../eval/nnue/arch/../io.h:58:21: error: template-id ‘write<stormphrax::i8>’ in declaration of primary template
   58 |         inline bool write<i8>(std::span<const i8> src) {
      |                     ^~~~~~~~~
src/datagen/../position/../eval/nnue/arch/../io.h:62:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   62 |         template <>
      |                   ^
src/datagen/../position/../eval/nnue/arch/../io.h:63:21: error: template-id ‘write<stormphrax::i16>’ in declaration of primary template
   63 |         inline bool write<i16>(std::span<const i16> src) {
      |                     ^~~~~~~~~~
src/datagen/../position/../eval/nnue/arch/../io.h:67:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   67 |         template <>
      |                   ^
src/datagen/../position/../eval/nnue/arch/../io.h:68:21: error: template-id ‘write<stormphrax::i32>’ in declaration of primary template
   68 |         inline bool write<i32>(std::span<const i32> src) {
      |                     ^~~~~~~~~~
src/datagen/../position/../eval/nnue/arch/multilayer.h: In member function ‘void stormphrax::eval::nnue::arch::PairwiseMultilayerCReLUSCReLUCReLU<kL1Size, kL2Size, kL3Size, kFtScaleBits, kFtQBits, kL1QBits, kDualActivation, OutputBucketing, kScale>::propagateL1(stormphrax::u32, std::span<const unsigned char, kL1Size>, std::span<int, kL2SizeFull>, const stormphrax::eval::nnue::arch::sparse::SparseContext<kL1Size>&) const’:
src/datagen/../position/../eval/nnue/arch/multilayer.h:156:87: warning: ignoring attributes on template argument ‘stormphrax::util::simd::Vector<int>’ {aka ‘__m256i’} [-Wignored-attributes]
  156 |             SP_SIMD_ALIGNAS util::MultiArray<Vector<i32>, kL2Size / kChunkSize<i32>, 4> intermediate{};
      |                                                                                       ^
In file included from src/datagen/../position/../eval/nnue.h:29:
src/datagen/../position/../eval/nnue/input.h: At global scope:
src/datagen/../position/../eval/nnue/input.h:338:15: warning: declaration of ‘using stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>::Accumulator = class stormphrax::eval::nnue::Accumulator<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet> >’ changes meaning of ‘Accumulator’ [-Wchanges-meaning]
  338 |         using Accumulator = Accumulator<FeatureTransformer<Type, kOutputs, FeatureSet>>;
      |               ^~~~~~~~~~~
src/datagen/../position/../eval/nnue/input.h:338:29: note: used here to mean ‘class stormphrax::eval::nnue::Accumulator<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet> >’
  338 |         using Accumulator = Accumulator<FeatureTransformer<Type, kOutputs, FeatureSet>>;
      |                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/datagen/../position/../eval/nnue/input.h:38:11: note: declared here
   38 |     class Accumulator {
      |           ^~~~~~~~~~~
src/datagen/../position/../eval/nnue/input.h:339:15: warning: declaration of ‘using stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>::RefreshTable = struct stormphrax::eval::nnue::RefreshTable<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>’ changes meaning of ‘RefreshTable’ [-Wchanges-meaning]
  339 |         using RefreshTable =
      |               ^~~~~~~~~~~~
src/datagen/../position/../eval/nnue/input.h:340:13: note: used here to mean ‘struct stormphrax::eval::nnue::RefreshTable<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>’
  340 |             RefreshTable<FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>;
      |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/datagen/../position/../eval/nnue/input.h:320:12: note: declared here
  320 |     struct RefreshTable {
      |            ^~~~~~~~~~~~
In file included from src/datagen/viriformat.h:25:
src/datagen/marlinformat.h:34:31: warning: ignoring packed attribute because of unpacked non-POD field ‘stormphrax::util::U4Array<32> stormphrax::datagen::marlinformat::PackedBoard::pieces’
   34 |             util::U4Array<32> pieces;
      |                               ^~~~~~
In file included from src/datagen/../position/../attacks/../util/bits.h:26,
                 from src/datagen/../position/../attacks/../bitboard.h:26,
                 from src/datagen/../position/../attacks/attacks.h:26,
                 from src/datagen/../position/position.h:31,
                 from src/datagen/fen.h:25,
                 from src/datagen/fen.cpp:19:
src/datagen/../position/../attacks/../util/../arch.h:81:42: warning: use of ‘std::hardware_destructive_interference_size’ [-Winterference-size]
   81 |     constexpr auto kCacheLineSize = std::hardware_destructive_interference_size;
      |                                     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/datagen/../position/../attacks/../util/../arch.h:81:42: note: its value can vary between compiler versions or with different ‘-mtune’ or ‘-mcpu’ flags
src/datagen/../position/../attacks/../util/../arch.h:81:42: note: if this use is part of a public ABI, change it to instead use a constant variable you define
src/datagen/../position/../attacks/../util/../arch.h:81:42: note: the default value for the current CPU tuning is 64 bytes
src/datagen/../position/../attacks/../util/../arch.h:81:42: note: you can stabilize this value with ‘--param hardware_destructive_interference_size=64’, or disable this warning with ‘-Wno-interference-size’
In file included from src/datagen/../position/../eval/nnue/arch/multilayer.h:31,
                 from src/datagen/../position/../eval/arch.h:26,
                 from src/datagen/../position/../eval/nnue.h:26,
                 from src/datagen/../position/position.h:32:
src/datagen/../position/../eval/nnue/arch/../io.h:34:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   34 |         template <>
      |                   ^
src/datagen/../position/../eval/nnue/arch/../io.h:35:21: error: template-id ‘read<stormphrax::i8>’ in declaration of primary template
   35 |         inline bool read<i8>(std::span<i8> dst) {
      |                     ^~~~~~~~
src/datagen/../position/../eval/nnue/arch/../io.h:39:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   39 |         template <>
      |                   ^
src/datagen/../position/../eval/nnue/arch/../io.h:40:21: error: template-id ‘read<stormphrax::i16>’ in declaration of primary template
   40 |         inline bool read<i16>(std::span<i16> dst) {
      |                     ^~~~~~~~~
src/datagen/../position/../eval/nnue/arch/../io.h:44:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   44 |         template <>
      |                   ^
src/datagen/../position/../eval/nnue/arch/../io.h:45:21: error: template-id ‘read<stormphrax::i32>’ in declaration of primary template
   45 |         inline bool read<i32>(std::span<i32> dst) {
      |                     ^~~~~~~~~
src/datagen/../position/../eval/nnue/arch/../io.h:57:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   57 |         template <>
      |                   ^
src/datagen/../position/../eval/nnue/arch/../io.h:58:21: error: template-id ‘write<stormphrax::i8>’ in declaration of primary template
   58 |         inline bool write<i8>(std::span<const i8> src) {
      |                     ^~~~~~~~~
src/datagen/../position/../eval/nnue/arch/../io.h:62:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   62 |         template <>
      |                   ^
src/datagen/../position/../eval/nnue/arch/../io.h:63:21: error: template-id ‘write<stormphrax::i16>’ in declaration of primary template
   63 |         inline bool write<i16>(std::span<const i16> src) {
      |                     ^~~~~~~~~~
src/datagen/../position/../eval/nnue/arch/../io.h:67:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   67 |         template <>
      |                   ^
src/datagen/../position/../eval/nnue/arch/../io.h:68:21: error: template-id ‘write<stormphrax::i32>’ in declaration of primary template
   68 |         inline bool write<i32>(std::span<const i32> src) {
      |                     ^~~~~~~~~~
src/datagen/../position/../eval/nnue/arch/multilayer.h: In member function ‘void stormphrax::eval::nnue::arch::PairwiseMultilayerCReLUSCReLUCReLU<kL1Size, kL2Size, kL3Size, kFtScaleBits, kFtQBits, kL1QBits, kDualActivation, OutputBucketing, kScale>::propagateL1(stormphrax::u32, std::span<const unsigned char, kL1Size>, std::span<int, kL2SizeFull>, const stormphrax::eval::nnue::arch::sparse::SparseContext<kL1Size>&) const’:
src/datagen/../position/../eval/nnue/arch/multilayer.h:156:87: warning: ignoring attributes on template argument ‘stormphrax::util::simd::Vector<int>’ {aka ‘__m256i’} [-Wignored-attributes]
  156 |             SP_SIMD_ALIGNAS util::MultiArray<Vector<i32>, kL2Size / kChunkSize<i32>, 4> intermediate{};
      |                                                                                       ^
In file included from src/datagen/../position/../eval/nnue.h:29:
src/datagen/../position/../eval/nnue/input.h: At global scope:
src/datagen/../position/../eval/nnue/input.h:338:15: warning: declaration of ‘using stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>::Accumulator = class stormphrax::eval::nnue::Accumulator<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet> >’ changes meaning of ‘Accumulator’ [-Wchanges-meaning]
  338 |         using Accumulator = Accumulator<FeatureTransformer<Type, kOutputs, FeatureSet>>;
      |               ^~~~~~~~~~~
src/datagen/../position/../eval/nnue/input.h:338:29: note: used here to mean ‘class stormphrax::eval::nnue::Accumulator<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet> >’
  338 |         using Accumulator = Accumulator<FeatureTransformer<Type, kOutputs, FeatureSet>>;
      |                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/datagen/../position/../eval/nnue/input.h:38:11: note: declared here
   38 |     class Accumulator {
      |           ^~~~~~~~~~~
src/datagen/../position/../eval/nnue/input.h:339:15: warning: declaration of ‘using stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>::RefreshTable = struct stormphrax::eval::nnue::RefreshTable<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>’ changes meaning of ‘RefreshTable’ [-Wchanges-meaning]
  339 |         using RefreshTable =
      |               ^~~~~~~~~~~~
src/datagen/../position/../eval/nnue/input.h:340:13: note: used here to mean ‘struct stormphrax::eval::nnue::RefreshTable<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>’
  340 |             RefreshTable<FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>;
      |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/datagen/../position/../eval/nnue/input.h:320:12: note: declared here
  320 |     struct RefreshTable {
      |            ^~~~~~~~~~~~
In file included from src/position/../attacks/../util/bits.h:26,
                 from src/position/../attacks/../bitboard.h:26,
                 from src/position/../attacks/attacks.h:26,
                 from src/position/position.h:31,
                 from src/movegen.h:24,
                 from src/tb.h:23,
                 from src/tb.cpp:19:
src/position/../attacks/../util/../arch.h:81:42: warning: use of ‘std::hardware_destructive_interference_size’ [-Winterference-size]
   81 |     constexpr auto kCacheLineSize = std::hardware_destructive_interference_size;
      |                                     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/position/../attacks/../util/../arch.h:81:42: note: its value can vary between compiler versions or with different ‘-mtune’ or ‘-mcpu’ flags
src/position/../attacks/../util/../arch.h:81:42: note: if this use is part of a public ABI, change it to instead use a constant variable you define
src/position/../attacks/../util/../arch.h:81:42: note: the default value for the current CPU tuning is 64 bytes
src/position/../attacks/../util/../arch.h:81:42: note: you can stabilize this value with ‘--param hardware_destructive_interference_size=64’, or disable this warning with ‘-Wno-interference-size’
In file included from src/position/../eval/nnue/arch/multilayer.h:31,
                 from src/position/../eval/arch.h:26,
                 from src/position/../eval/nnue.h:26,
                 from src/position/position.h:32:
src/position/../eval/nnue/arch/../io.h:34:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   34 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:35:21: error: template-id ‘read<stormphrax::i8>’ in declaration of primary template
   35 |         inline bool read<i8>(std::span<i8> dst) {
      |                     ^~~~~~~~
src/position/../eval/nnue/arch/../io.h:39:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   39 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:40:21: error: template-id ‘read<stormphrax::i16>’ in declaration of primary template
   40 |         inline bool read<i16>(std::span<i16> dst) {
      |                     ^~~~~~~~~
src/position/../eval/nnue/arch/../io.h:44:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   44 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:45:21: error: template-id ‘read<stormphrax::i32>’ in declaration of primary template
   45 |         inline bool read<i32>(std::span<i32> dst) {
      |                     ^~~~~~~~~
src/position/../eval/nnue/arch/../io.h:57:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   57 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:58:21: error: template-id ‘write<stormphrax::i8>’ in declaration of primary template
   58 |         inline bool write<i8>(std::span<const i8> src) {
      |                     ^~~~~~~~~
src/position/../eval/nnue/arch/../io.h:62:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   62 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:63:21: error: template-id ‘write<stormphrax::i16>’ in declaration of primary template
   63 |         inline bool write<i16>(std::span<const i16> src) {
      |                     ^~~~~~~~~~
src/position/../eval/nnue/arch/../io.h:67:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   67 |         template <>
      |                   ^
src/position/../eval/nnue/arch/../io.h:68:21: error: template-id ‘write<stormphrax::i32>’ in declaration of primary template
   68 |         inline bool write<i32>(std::span<const i32> src) {
      |                     ^~~~~~~~~~
src/position/../eval/nnue/arch/multilayer.h: In member function ‘void stormphrax::eval::nnue::arch::PairwiseMultilayerCReLUSCReLUCReLU<kL1Size, kL2Size, kL3Size, kFtScaleBits, kFtQBits, kL1QBits, kDualActivation, OutputBucketing, kScale>::propagateL1(stormphrax::u32, std::span<const unsigned char, kL1Size>, std::span<int, kL2SizeFull>, const stormphrax::eval::nnue::arch::sparse::SparseContext<kL1Size>&) const’:
src/position/../eval/nnue/arch/multilayer.h:156:87: warning: ignoring attributes on template argument ‘stormphrax::util::simd::Vector<int>’ {aka ‘__m256i’} [-Wignored-attributes]
  156 |             SP_SIMD_ALIGNAS util::MultiArray<Vector<i32>, kL2Size / kChunkSize<i32>, 4> intermediate{};
      |                                                                                       ^
In file included from src/position/../eval/nnue.h:29:
src/position/../eval/nnue/input.h: At global scope:
src/position/../eval/nnue/input.h:338:15: warning: declaration of ‘using stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>::Accumulator = class stormphrax::eval::nnue::Accumulator<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet> >’ changes meaning of ‘Accumulator’ [-Wchanges-meaning]
  338 |         using Accumulator = Accumulator<FeatureTransformer<Type, kOutputs, FeatureSet>>;
      |               ^~~~~~~~~~~
src/position/../eval/nnue/input.h:338:29: note: used here to mean ‘class stormphrax::eval::nnue::Accumulator<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet> >’
  338 |         using Accumulator = Accumulator<FeatureTransformer<Type, kOutputs, FeatureSet>>;
      |                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/position/../eval/nnue/input.h:38:11: note: declared here
   38 |     class Accumulator {
      |           ^~~~~~~~~~~
src/position/../eval/nnue/input.h:339:15: warning: declaration of ‘using stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>::RefreshTable = struct stormphrax::eval::nnue::RefreshTable<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>’ changes meaning of ‘RefreshTable’ [-Wchanges-meaning]
  339 |         using RefreshTable =
      |               ^~~~~~~~~~~~
src/position/../eval/nnue/input.h:340:13: note: used here to mean ‘struct stormphrax::eval::nnue::RefreshTable<stormphrax::eval::nnue::FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>’
  340 |             RefreshTable<FeatureTransformer<Type, kOutputs, FeatureSet>, FeatureSet::kRefreshTableSize>;
      |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/position/../eval/nnue/input.h:320:12: note: declared here
  320 |     struct RefreshTable {
      |            ^~~~~~~~~~~~
In file included from src/3rdparty/pyrrhic/tbconfig.h:30,
                 from src/3rdparty/pyrrhic/tbprobe.h:32,
                 from src/tb.cpp:21:
src/3rdparty/pyrrhic/../../search.h:395:19: error: explicit specialization in non-namespace scope ‘class stormphrax::search::Searcher’
  395 |         template <>
      |                   ^
src/3rdparty/pyrrhic/../../search.h:396:15: error: template-id ‘search<false, true>’ in declaration of primary template
  396 |         Score search<false, true>(
      |               ^~~~~~~~~~~~~~~~~~~
In file included from src/eval/nnue/io_impl.h:33,
                 from src/eval/nnue/io_impl.cpp:19:
src/eval/nnue/io.h:34:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   34 |         template <>
      |                   ^
src/eval/nnue/io.h:35:21: error: template-id ‘read<stormphrax::i8>’ in declaration of primary template
   35 |         inline bool read<i8>(std::span<i8> dst) {
      |                     ^~~~~~~~
src/eval/nnue/io.h:39:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   39 |         template <>
      |                   ^
src/eval/nnue/io.h:40:21: error: template-id ‘read<stormphrax::i16>’ in declaration of primary template
   40 |         inline bool read<i16>(std::span<i16> dst) {
      |                     ^~~~~~~~~
src/eval/nnue/io.h:44:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   44 |         template <>
      |                   ^
src/eval/nnue/io.h:45:21: error: template-id ‘read<stormphrax::i32>’ in declaration of primary template
   45 |         inline bool read<i32>(std::span<i32> dst) {
      |                     ^~~~~~~~~
src/eval/nnue/io.h:57:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   57 |         template <>
      |                   ^
src/eval/nnue/io.h:58:21: error: template-id ‘write<stormphrax::i8>’ in declaration of primary template
   58 |         inline bool write<i8>(std::span<const i8> src) {
      |                     ^~~~~~~~~
src/eval/nnue/io.h:62:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   62 |         template <>
      |                   ^
src/eval/nnue/io.h:63:21: error: template-id ‘write<stormphrax::i16>’ in declaration of primary template
   63 |         inline bool write<i16>(std::span<const i16> src) {
      |                     ^~~~~~~~~~
src/eval/nnue/io.h:67:19: error: explicit specialization in non-namespace scope ‘class stormphrax::eval::nnue::IParamStream’
   67 |         template <>
      |                   ^
src/eval/nnue/io.h:68:21: error: template-id ‘write<stormphrax::i32>’ in declaration of primary template
   68 |         inline bool write<i32>(std::span<const i32> src) {
      |                     ^~~~~~~~~~
In file included from src/attacks/black_magic/../../util/bits.h:26,
                 from src/attacks/black_magic/../../bitboard.h:26,
                 from src/attacks/black_magic/../attacks.h:26,
                 from src/attacks/black_magic/attacks.cpp:19:
src/attacks/black_magic/../../util/../arch.h:81:42: warning: use of ‘std::hardware_destructive_interference_size’ [-Winterference-size]
   81 |     constexpr auto kCacheLineSize = std::hardware_destructive_interference_size;
      |                                     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/attacks/black_magic/../../util/../arch.h:81:42: note: its value can vary between compiler versions or with different ‘-mtune’ or ‘-mcpu’ flags
src/attacks/black_magic/../../util/../arch.h:81:42: note: if this use is part of a public ABI, change it to instead use a constant variable you define
src/attacks/black_magic/../../util/../arch.h:81:42: note: the default value for the current CPU tuning is 64 bytes
src/attacks/black_magic/../../util/../arch.h:81:42: note: you can stabilize this value with ‘--param hardware_destructive_interference_size=64’, or disable this warning with ‘-Wno-interference-size’
In file included from src/attacks/bmi2/../../util/bits.h:26,
                 from src/attacks/bmi2/../../bitboard.h:26,
                 from src/attacks/bmi2/../attacks.h:26,
                 from src/attacks/bmi2/attacks.cpp:19:
src/attacks/bmi2/../../util/../arch.h:81:42: warning: use of ‘std::hardware_destructive_interference_size’ [-Winterference-size]
   81 |     constexpr auto kCacheLineSize = std::hardware_destructive_interference_size;
      |                                     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/attacks/bmi2/../../util/../arch.h:81:42: note: its value can vary between compiler versions or with different ‘-mtune’ or ‘-mcpu’ flags
src/attacks/bmi2/../../util/../arch.h:81:42: note: if this use is part of a public ABI, change it to instead use a constant variable you define
src/attacks/bmi2/../../util/../arch.h:81:42: note: the default value for the current CPU tuning is 64 bytes
src/attacks/bmi2/../../util/../arch.h:81:42: note: you can stabilize this value with ‘--param hardware_destructive_interference_size=64’, or disable this warning with ‘-Wno-interference-size’
make: *** [Makefile:153: Stormphrax-100DB563] Error 1