OS8 ProffieOS Menu System

That’s why I’m confused.
Resigning to just defining MENU_SPEC_TEMPLATE in the config file,
#define MENU_SPEC_TEMPLATE BCMenuSpec

and then having the spec before including prop_base:

template<class SPEC>
struct BCMenuSpec {
  typedef BCVolumeMode<SPEC> BCVolumeMenu;
#ifdef DYNAMIC_BLADE_LENGTH
  typedef mode::ShowLengthStyle<SPEC> ShowLengthStyle;
  typedef mode::ChangeBladeLengthBlade1<SPEC> ChangeBladeLengthMode;
#endif
  typedef mode::SelectCancelMode SelectCancelMode;
  typedef mode::SteppedMode<SPEC> SteppedMode;
  typedef mode::ColorChangeMode<SPEC> ColorChangeMenu;
  typedef mode::MenuBase<SPEC> MenuBase;
  typedef SoundLibraryV2Template<SPEC> SoundLibrary;
};
#include "prop_base.h"

still gives me
error: 'BCMenuSpec' was not declared in this scope 192 | #define MENU_SPEC_TEMPLATE BCMenuSpec
I should walk away for a bit.

This doesn’t tell me enough about what is going on to help.
I need to see the full error message.

Arduino: 1.8.19 (Mac OS X), Board: "Proffieboard V2, Serial, SDCARD (SPI), 80 MHz, Smallest Code"

In file included from ProffieOS/config/BC_2ndSister_7.x_Official_Dual_Blade.h:204,
                 from ProffieOS/ProffieOS.ino:834:
ProffieOS/props/saber_BC_buttons_personal.h:1152:2: warning: #warning The faston.wav sound will be replaced with fastout.wav. If you have a good reason to keep faston.wav as is, please post at https: [-Wcpp]
 1152 | #warning The faston.wav sound will be replaced with fastout.wav. If you have a good reason to keep faston.wav as is, please post at https://crucible.hubbe.net/
      |  ^~~~~~~
In file included from ProffieOS/ProffieOS.ino:151:
ProffieOS/props/prop_base.h: In member function 'virtual bool PropBase::chdir(StringPiece)':
ProffieOS/config/BC_2ndSister_7.x_Official_Dual_Blade.h:192:30: error: 'BCMenuSpec' was not declared in this scope
  192 |   #define MENU_SPEC_TEMPLATE BCMenuSpec
      |                              ^~~~~~~~~~
ProffieOS/sound/sound_library.h:604:64: note: in expansion of macro 'MENU_SPEC_TEMPLATE'
  604 | #  define FINAL_MENU_SPEC_TEMPLATE UpgradeSoundLibraryIfNeeded<MENU_SPEC_TEMPLATE, SL_TEMPLATE_NAME>::UPGRADED_SPEC
      |                                                                ^~~~~~~~~~~~~~~~~~
ProffieOS/sound/sound_library.h:610:40: note: in expansion of macro 'FINAL_MENU_SPEC_TEMPLATE'
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                        ^~~~~~~~~~~~~~~~~~~~~~~~
ProffieOS/props/prop_base.h:316:5: note: in expansion of macro 'sound_library_'
  316 |     sound_library_.CheckVersion();
      |     ^~~~~~~~~~~~~~
In file included from ProffieOS/props/prop_base.h:5,
                 from ProffieOS/props/saber_BC_buttons_personal.h:1333,
                 from ProffieOS/config/BC_2ndSister_7.x_Official_Dual_Blade.h:204,
                 from ProffieOS/ProffieOS.ino:834:
ProffieOS/sound/sound_library.h:604:100: error: template argument 1 is invalid
  604 | #  define FINAL_MENU_SPEC_TEMPLATE UpgradeSoundLibraryIfNeeded<MENU_SPEC_TEMPLATE, SL_TEMPLATE_NAME>::UPGRADED_SPEC
      |                                                                                                    ^
ProffieOS/sound/sound_library.h:610:40: note: in expansion of macro 'FINAL_MENU_SPEC_TEMPLATE'
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                        ^~~~~~~~~~~~~~~~~~~~~~~~
ProffieOS/props/prop_base.h:316:5: note: in expansion of macro 'sound_library_'
  316 |     sound_library_.CheckVersion();
      |     ^~~~~~~~~~~~~~
ProffieOS/sound/sound_library.h:610:64: error: template argument 1 is invalid
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                                                ^
ProffieOS/props/prop_base.h:316:5: note: in expansion of macro 'sound_library_'
  316 |     sound_library_.CheckVersion();
      |     ^~~~~~~~~~~~~~
ProffieOS/sound/sound_library.h:610:81: error: no matching function for call to 'getPtr<<expression error> >()'
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                                                                 ^
ProffieOS/props/prop_base.h:316:5: note: in expansion of macro 'sound_library_'
  316 |     sound_library_.CheckVersion();
      |     ^~~~~~~~~~~~~~
In file included from ProffieOS/common/preset.h:4,
                 from ProffieOS/ProffieOS.ino:767:
ProffieOS/common/malloc_helper.h:133:8: note: candidate: 'template<class CLASS> CLASS* getPtr()'
  133 | CLASS* getPtr() {
      |        ^~~~~~
ProffieOS/common/malloc_helper.h:133:8: note:   template argument deduction/substitution failed:
In file included from ProffieOS/props/prop_base.h:5,
                 from ProffieOS/props/saber_BC_buttons_personal.h:1333,
                 from ProffieOS/config/BC_2ndSister_7.x_Official_Dual_Blade.h:204,
                 from ProffieOS/ProffieOS.ino:834:
ProffieOS/sound/sound_library.h:610:81: error: template argument 1 is invalid
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                                                                 ^
ProffieOS/props/prop_base.h:316:5: note: in expansion of macro 'sound_library_'
  316 |     sound_library_.CheckVersion();
      |     ^~~~~~~~~~~~~~
In file included from ProffieOS/ProffieOS.ino:151:
ProffieOS/props/prop_base.h: In member function 'virtual void PropBase::Loop()':
ProffieOS/config/BC_2ndSister_7.x_Official_Dual_Blade.h:192:30: error: 'BCMenuSpec' was not declared in this scope
  192 |   #define MENU_SPEC_TEMPLATE BCMenuSpec
      |                              ^~~~~~~~~~
ProffieOS/sound/sound_library.h:604:64: note: in expansion of macro 'MENU_SPEC_TEMPLATE'
  604 | #  define FINAL_MENU_SPEC_TEMPLATE UpgradeSoundLibraryIfNeeded<MENU_SPEC_TEMPLATE, SL_TEMPLATE_NAME>::UPGRADED_SPEC
      |                                                                ^~~~~~~~~~~~~~~~~~
ProffieOS/sound/sound_library.h:610:40: note: in expansion of macro 'FINAL_MENU_SPEC_TEMPLATE'
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                        ^~~~~~~~~~~~~~~~~~~~~~~~
ProffieOS/props/prop_base.h:1144:5: note: in expansion of macro 'sound_library_'
 1144 |     sound_library_.Poll(wav_player_);
      |     ^~~~~~~~~~~~~~
In file included from ProffieOS/props/prop_base.h:5,
                 from ProffieOS/props/saber_BC_buttons_personal.h:1333,
                 from ProffieOS/config/BC_2ndSister_7.x_Official_Dual_Blade.h:204,
                 from ProffieOS/ProffieOS.ino:834:
ProffieOS/sound/sound_library.h:604:100: error: template argument 1 is invalid
  604 | #  define FINAL_MENU_SPEC_TEMPLATE UpgradeSoundLibraryIfNeeded<MENU_SPEC_TEMPLATE, SL_TEMPLATE_NAME>::UPGRADED_SPEC
      |                                                                                                    ^
ProffieOS/sound/sound_library.h:610:40: note: in expansion of macro 'FINAL_MENU_SPEC_TEMPLATE'
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                        ^~~~~~~~~~~~~~~~~~~~~~~~
ProffieOS/props/prop_base.h:1144:5: note: in expansion of macro 'sound_library_'
 1144 |     sound_library_.Poll(wav_player_);
      |     ^~~~~~~~~~~~~~
ProffieOS/sound/sound_library.h:610:64: error: template argument 1 is invalid
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                                                ^
ProffieOS/props/prop_base.h:1144:5: note: in expansion of macro 'sound_library_'
 1144 |     sound_library_.Poll(wav_player_);
      |     ^~~~~~~~~~~~~~
ProffieOS/sound/sound_library.h:610:81: error: no matching function for call to 'getPtr<<expression error> >()'
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                                                                 ^
ProffieOS/props/prop_base.h:1144:5: note: in expansion of macro 'sound_library_'
 1144 |     sound_library_.Poll(wav_player_);
      |     ^~~~~~~~~~~~~~
In file included from ProffieOS/common/preset.h:4,
                 from ProffieOS/ProffieOS.ino:767:
ProffieOS/common/malloc_helper.h:133:8: note: candidate: 'template<class CLASS> CLASS* getPtr()'
  133 | CLASS* getPtr() {
      |        ^~~~~~
ProffieOS/common/malloc_helper.h:133:8: note:   template argument deduction/substitution failed:
In file included from ProffieOS/props/prop_base.h:5,
                 from ProffieOS/props/saber_BC_buttons_personal.h:1333,
                 from ProffieOS/config/BC_2ndSister_7.x_Official_Dual_Blade.h:204,
                 from ProffieOS/ProffieOS.ino:834:
ProffieOS/sound/sound_library.h:610:81: error: template argument 1 is invalid
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                                                                 ^
ProffieOS/props/prop_base.h:1144:5: note: in expansion of macro 'sound_library_'
 1144 |     sound_library_.Poll(wav_player_);
      |     ^~~~~~~~~~~~~~
In file included from ProffieOS/ProffieOS.ino:151:
ProffieOS/props/prop_base.h: In member function 'void PropBase::EnterMenu()':
ProffieOS/config/BC_2ndSister_7.x_Official_Dual_Blade.h:192:30: error: 'BCMenuSpec' was not declared in this scope
  192 |   #define MENU_SPEC_TEMPLATE BCMenuSpec
      |                              ^~~~~~~~~~
ProffieOS/sound/sound_library.h:604:64: note: in expansion of macro 'MENU_SPEC_TEMPLATE'
  604 | #  define FINAL_MENU_SPEC_TEMPLATE UpgradeSoundLibraryIfNeeded<MENU_SPEC_TEMPLATE, SL_TEMPLATE_NAME>::UPGRADED_SPEC
      |                                                                ^~~~~~~~~~~~~~~~~~
ProffieOS/props/prop_base.h:1190:21: note: in expansion of macro 'FINAL_MENU_SPEC_TEMPLATE'
 1190 |     pushMode<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::MENU_SPEC_MENU>();
      |                     ^~~~~~~~~~~~~~~~~~~~~~~~
In file included from ProffieOS/props/prop_base.h:5,
                 from ProffieOS/props/saber_BC_buttons_personal.h:1333,
                 from ProffieOS/config/BC_2ndSister_7.x_Official_Dual_Blade.h:204,
                 from ProffieOS/ProffieOS.ino:834:
ProffieOS/sound/sound_library.h:604:100: error: template argument 1 is invalid
  604 | #  define FINAL_MENU_SPEC_TEMPLATE UpgradeSoundLibraryIfNeeded<MENU_SPEC_TEMPLATE, SL_TEMPLATE_NAME>::UPGRADED_SPEC
      |                                                                                                    ^
ProffieOS/props/prop_base.h:1190:21: note: in expansion of macro 'FINAL_MENU_SPEC_TEMPLATE'
 1190 |     pushMode<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::MENU_SPEC_MENU>();
      |                     ^~~~~~~~~~~~~~~~~~~~~~~~
In file included from ProffieOS/props/saber_BC_buttons_personal.h:1333,
                 from ProffieOS/config/BC_2ndSister_7.x_Official_Dual_Blade.h:204,
                 from ProffieOS/ProffieOS.ino:834:
ProffieOS/props/prop_base.h:1190:45: error: template argument 1 is invalid
 1190 |     pushMode<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::MENU_SPEC_MENU>();
      |                                             ^
ProffieOS/props/prop_base.h:1190:64: error: no matching function for call to 'pushMode<<expression error> >()'
 1190 |     pushMode<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::MENU_SPEC_MENU>();
      |                                                                ^
In file included from ProffieOS/ProffieOS.ino:778:
ProffieOS/modes/mode.h:21:6: note: candidate: 'template<class MODE> void pushMode()'
   21 | void pushMode() {
      |      ^~~~~~~~
ProffieOS/modes/mode.h:21:6: note:   template argument deduction/substitution failed:
In file included from ProffieOS/props/saber_BC_buttons_personal.h:1333,
                 from ProffieOS/config/BC_2ndSister_7.x_Official_Dual_Blade.h:204,
                 from ProffieOS/ProffieOS.ino:834:
ProffieOS/props/prop_base.h:1190:64: error: template argument 1 is invalid
 1190 |     pushMode<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::MENU_SPEC_MENU>();
      |                                                                ^
In file included from ProffieOS/ProffieOS.ino:151:
ProffieOS/props/saber_BC_buttons_personal.h: In member function 'virtual void SaberBCButtons::Loop()':
ProffieOS/config/BC_2ndSister_7.x_Official_Dual_Blade.h:192:30: error: 'BCMenuSpec' was not declared in this scope
  192 |   #define MENU_SPEC_TEMPLATE BCMenuSpec
      |                              ^~~~~~~~~~
ProffieOS/sound/sound_library.h:604:64: note: in expansion of macro 'MENU_SPEC_TEMPLATE'
  604 | #  define FINAL_MENU_SPEC_TEMPLATE UpgradeSoundLibraryIfNeeded<MENU_SPEC_TEMPLATE, SL_TEMPLATE_NAME>::UPGRADED_SPEC
      |                                                                ^~~~~~~~~~~~~~~~~~
ProffieOS/sound/sound_library.h:610:40: note: in expansion of macro 'FINAL_MENU_SPEC_TEMPLATE'
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                        ^~~~~~~~~~~~~~~~~~~~~~~~
ProffieOS/props/saber_BC_buttons_personal.h:1358:5: note: in expansion of macro 'sound_library_'
 1358 |     sound_library_.Poll(wav_player);
      |     ^~~~~~~~~~~~~~
In file included from ProffieOS/props/prop_base.h:5,
                 from ProffieOS/props/saber_BC_buttons_personal.h:1333,
                 from ProffieOS/config/BC_2ndSister_7.x_Official_Dual_Blade.h:204,
                 from ProffieOS/ProffieOS.ino:834:
ProffieOS/sound/sound_library.h:604:100: error: template argument 1 is invalid
  604 | #  define FINAL_MENU_SPEC_TEMPLATE UpgradeSoundLibraryIfNeeded<MENU_SPEC_TEMPLATE, SL_TEMPLATE_NAME>::UPGRADED_SPEC
      |                                                                                                    ^
ProffieOS/sound/sound_library.h:610:40: note: in expansion of macro 'FINAL_MENU_SPEC_TEMPLATE'
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                        ^~~~~~~~~~~~~~~~~~~~~~~~
ProffieOS/props/saber_BC_buttons_personal.h:1358:5: note: in expansion of macro 'sound_library_'
 1358 |     sound_library_.Poll(wav_player);
      |     ^~~~~~~~~~~~~~
ProffieOS/sound/sound_library.h:610:64: error: template argument 1 is invalid
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                                                ^
ProffieOS/props/saber_BC_buttons_personal.h:1358:5: note: in expansion of macro 'sound_library_'
 1358 |     sound_library_.Poll(wav_player);
      |     ^~~~~~~~~~~~~~
ProffieOS/sound/sound_library.h:610:81: error: no matching function for call to 'getPtr<<expression error> >()'
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                                                                 ^
ProffieOS/props/saber_BC_buttons_personal.h:1358:5: note: in expansion of macro 'sound_library_'
 1358 |     sound_library_.Poll(wav_player);
      |     ^~~~~~~~~~~~~~
In file included from ProffieOS/common/preset.h:4,
                 from ProffieOS/ProffieOS.ino:767:
ProffieOS/common/malloc_helper.h:133:8: note: candidate: 'template<class CLASS> CLASS* getPtr()'
  133 | CLASS* getPtr() {
      |        ^~~~~~
ProffieOS/common/malloc_helper.h:133:8: note:   template argument deduction/substitution failed:
In file included from ProffieOS/props/prop_base.h:5,
                 from ProffieOS/props/saber_BC_buttons_personal.h:1333,
                 from ProffieOS/config/BC_2ndSister_7.x_Official_Dual_Blade.h:204,
                 from ProffieOS/ProffieOS.ino:834:
ProffieOS/sound/sound_library.h:610:81: error: template argument 1 is invalid
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                                                                 ^
ProffieOS/props/saber_BC_buttons_personal.h:1358:5: note: in expansion of macro 'sound_library_'
 1358 |     sound_library_.Poll(wav_player);
      |     ^~~~~~~~~~~~~~
In file included from ProffieOS/ProffieOS.ino:151:
ProffieOS/props/saber_BC_buttons_personal.h: In member function 'void SaberBCButtons::DoSpokenBatteryLevel()':
ProffieOS/config/BC_2ndSister_7.x_Official_Dual_Blade.h:192:30: error: 'BCMenuSpec' was not declared in this scope
  192 |   #define MENU_SPEC_TEMPLATE BCMenuSpec
      |                              ^~~~~~~~~~
ProffieOS/sound/sound_library.h:604:64: note: in expansion of macro 'MENU_SPEC_TEMPLATE'
  604 | #  define FINAL_MENU_SPEC_TEMPLATE UpgradeSoundLibraryIfNeeded<MENU_SPEC_TEMPLATE, SL_TEMPLATE_NAME>::UPGRADED_SPEC
      |                                                                ^~~~~~~~~~~~~~~~~~
ProffieOS/sound/sound_library.h:610:40: note: in expansion of macro 'FINAL_MENU_SPEC_TEMPLATE'
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                        ^~~~~~~~~~~~~~~~~~~~~~~~
ProffieOS/props/saber_BC_buttons_personal.h:1706:7: note: in expansion of macro 'sound_library_'
 1706 |       sound_library_.SayTheBatteryLevelIs();
      |       ^~~~~~~~~~~~~~
In file included from ProffieOS/props/prop_base.h:5,
                 from ProffieOS/props/saber_BC_buttons_personal.h:1333,
                 from ProffieOS/config/BC_2ndSister_7.x_Official_Dual_Blade.h:204,
                 from ProffieOS/ProffieOS.ino:834:
ProffieOS/sound/sound_library.h:604:100: error: template argument 1 is invalid
  604 | #  define FINAL_MENU_SPEC_TEMPLATE UpgradeSoundLibraryIfNeeded<MENU_SPEC_TEMPLATE, SL_TEMPLATE_NAME>::UPGRADED_SPEC
      |                                                                                                    ^
ProffieOS/sound/sound_library.h:610:40: note: in expansion of macro 'FINAL_MENU_SPEC_TEMPLATE'
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                        ^~~~~~~~~~~~~~~~~~~~~~~~
ProffieOS/props/saber_BC_buttons_personal.h:1706:7: note: in expansion of macro 'sound_library_'
 1706 |       sound_library_.SayTheBatteryLevelIs();
      |       ^~~~~~~~~~~~~~
ProffieOS/sound/sound_library.h:610:64: error: template argument 1 is invalid
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                                                ^
ProffieOS/props/saber_BC_buttons_personal.h:1706:7: note: in expansion of macro 'sound_library_'
 1706 |       sound_library_.SayTheBatteryLevelIs();
      |       ^~~~~~~~~~~~~~
ProffieOS/sound/sound_library.h:610:81: error: no matching function for call to 'getPtr<<expression error> >()'
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                                                                 ^
ProffieOS/props/saber_BC_buttons_personal.h:1706:7: note: in expansion of macro 'sound_library_'
 1706 |       sound_library_.SayTheBatteryLevelIs();
      |       ^~~~~~~~~~~~~~
In file included from ProffieOS/common/preset.h:4,
                 from ProffieOS/ProffieOS.ino:767:
ProffieOS/common/malloc_helper.h:133:8: note: candidate: 'template<class CLASS> CLASS* getPtr()'
  133 | CLASS* getPtr() {
      |        ^~~~~~
ProffieOS/common/malloc_helper.h:133:8: note:   template argument deduction/substitution failed:
In file included from ProffieOS/props/prop_base.h:5,
                 from ProffieOS/props/saber_BC_buttons_personal.h:1333,
                 from ProffieOS/config/BC_2ndSister_7.x_Official_Dual_Blade.h:204,
                 from ProffieOS/ProffieOS.ino:834:
ProffieOS/sound/sound_library.h:610:81: error: template argument 1 is invalid
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                                                                 ^
ProffieOS/props/saber_BC_buttons_personal.h:1706:7: note: in expansion of macro 'sound_library_'
 1706 |       sound_library_.SayTheBatteryLevelIs();
      |       ^~~~~~~~~~~~~~
ProffieOS/sound/sound_library.h:610:64: error: template argument 1 is invalid
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                                                ^
ProffieOS/props/saber_BC_buttons_personal.h:1707:7: note: in expansion of macro 'sound_library_'
 1707 |       sound_library_.SayDisabled();
      |       ^~~~~~~~~~~~~~
ProffieOS/sound/sound_library.h:610:81: error: no matching function for call to 'getPtr<<expression error> >()'
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                                                                 ^
ProffieOS/props/saber_BC_buttons_personal.h:1707:7: note: in expansion of macro 'sound_library_'
 1707 |       sound_library_.SayDisabled();
      |       ^~~~~~~~~~~~~~
In file included from ProffieOS/common/preset.h:4,
                 from ProffieOS/ProffieOS.ino:767:
ProffieOS/common/malloc_helper.h:133:8: note: candidate: 'template<class CLASS> CLASS* getPtr()'
  133 | CLASS* getPtr() {
      |        ^~~~~~
ProffieOS/common/malloc_helper.h:133:8: note:   template argument deduction/substitution failed:
In file included from ProffieOS/props/prop_base.h:5,
                 from ProffieOS/props/saber_BC_buttons_personal.h:1333,
                 from ProffieOS/config/BC_2ndSister_7.x_Official_Dual_Blade.h:204,
                 from ProffieOS/ProffieOS.ino:834:
ProffieOS/sound/sound_library.h:610:81: error: template argument 1 is invalid
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                                                                 ^
ProffieOS/props/saber_BC_buttons_personal.h:1707:7: note: in expansion of macro 'sound_library_'
 1707 |       sound_library_.SayDisabled();
      |       ^~~~~~~~~~~~~~
In file included from ProffieOS/ProffieOS.ino:151:
ProffieOS/config/BC_2ndSister_7.x_Official_Dual_Blade.h:192:30: error: 'BCMenuSpec' was not declared in this scope
  192 |   #define MENU_SPEC_TEMPLATE BCMenuSpec
      |                              ^~~~~~~~~~
ProffieOS/sound/sound_library.h:604:64: note: in expansion of macro 'MENU_SPEC_TEMPLATE'
  604 | #  define FINAL_MENU_SPEC_TEMPLATE UpgradeSoundLibraryIfNeeded<MENU_SPEC_TEMPLATE, SL_TEMPLATE_NAME>::UPGRADED_SPEC
      |                                                                ^~~~~~~~~~~~~~~~~~
ProffieOS/sound/sound_library.h:610:40: note: in expansion of macro 'FINAL_MENU_SPEC_TEMPLATE'
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                        ^~~~~~~~~~~~~~~~~~~~~~~~
ProffieOS/props/saber_BC_buttons_personal.h:1710:5: note: in expansion of macro 'sound_library_'
 1710 |     sound_library_.SayTheBatteryLevelIs();
      |     ^~~~~~~~~~~~~~
In file included from ProffieOS/props/prop_base.h:5,
                 from ProffieOS/props/saber_BC_buttons_personal.h:1333,
                 from ProffieOS/config/BC_2ndSister_7.x_Official_Dual_Blade.h:204,
                 from ProffieOS/ProffieOS.ino:834:
ProffieOS/sound/sound_library.h:604:100: error: template argument 1 is invalid
  604 | #  define FINAL_MENU_SPEC_TEMPLATE UpgradeSoundLibraryIfNeeded<MENU_SPEC_TEMPLATE, SL_TEMPLATE_NAME>::UPGRADED_SPEC
      |                                                                                                    ^
ProffieOS/sound/sound_library.h:610:40: note: in expansion of macro 'FINAL_MENU_SPEC_TEMPLATE'
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                        ^~~~~~~~~~~~~~~~~~~~~~~~
ProffieOS/props/saber_BC_buttons_personal.h:1710:5: note: in expansion of macro 'sound_library_'
 1710 |     sound_library_.SayTheBatteryLevelIs();
      |     ^~~~~~~~~~~~~~
ProffieOS/sound/sound_library.h:610:64: error: template argument 1 is invalid
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                                                ^
ProffieOS/props/saber_BC_buttons_personal.h:1710:5: note: in expansion of macro 'sound_library_'
 1710 |     sound_library_.SayTheBatteryLevelIs();
      |     ^~~~~~~~~~~~~~
ProffieOS/sound/sound_library.h:610:81: error: no matching function for call to 'getPtr<<expression error> >()'
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                                                                 ^
ProffieOS/props/saber_BC_buttons_personal.h:1710:5: note: in expansion of macro 'sound_library_'
 1710 |     sound_library_.SayTheBatteryLevelIs();
      |     ^~~~~~~~~~~~~~
In file included from ProffieOS/common/preset.h:4,
                 from ProffieOS/ProffieOS.ino:767:
ProffieOS/common/malloc_helper.h:133:8: note: candidate: 'template<class CLASS> CLASS* getPtr()'
  133 | CLASS* getPtr() {
      |        ^~~~~~
ProffieOS/common/malloc_helper.h:133:8: note:   template argument deduction/substitution failed:
In file included from ProffieOS/props/prop_base.h:5,
                 from ProffieOS/props/saber_BC_buttons_personal.h:1333,
                 from ProffieOS/config/BC_2ndSister_7.x_Official_Dual_Blade.h:204,
                 from ProffieOS/ProffieOS.ino:834:
ProffieOS/sound/sound_library.h:610:81: error: template argument 1 is invalid
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                                                                 ^
ProffieOS/props/saber_BC_buttons_personal.h:1710:5: note: in expansion of macro 'sound_library_'
 1710 |     sound_library_.SayTheBatteryLevelIs();
      |     ^~~~~~~~~~~~~~
ProffieOS/sound/sound_library.h:610:64: error: template argument 1 is invalid
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                                                ^
ProffieOS/props/saber_BC_buttons_personal.h:1713:7: note: in expansion of macro 'sound_library_'
 1713 |       sound_library_.SayNumber(battery_monitor.battery(), SAY_DECIMAL);
      |       ^~~~~~~~~~~~~~
ProffieOS/sound/sound_library.h:610:81: error: no matching function for call to 'getPtr<<expression error> >()'
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                                                                 ^
ProffieOS/props/saber_BC_buttons_personal.h:1713:7: note: in expansion of macro 'sound_library_'
 1713 |       sound_library_.SayNumber(battery_monitor.battery(), SAY_DECIMAL);
      |       ^~~~~~~~~~~~~~
In file included from ProffieOS/common/preset.h:4,
                 from ProffieOS/ProffieOS.ino:767:
ProffieOS/common/malloc_helper.h:133:8: note: candidate: 'template<class CLASS> CLASS* getPtr()'
  133 | CLASS* getPtr() {
      |        ^~~~~~
ProffieOS/common/malloc_helper.h:133:8: note:   template argument deduction/substitution failed:
In file included from ProffieOS/props/prop_base.h:5,
                 from ProffieOS/props/saber_BC_buttons_personal.h:1333,
                 from ProffieOS/config/BC_2ndSister_7.x_Official_Dual_Blade.h:204,
                 from ProffieOS/ProffieOS.ino:834:
ProffieOS/sound/sound_library.h:610:81: error: template argument 1 is invalid
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                                                                 ^
ProffieOS/props/saber_BC_buttons_personal.h:1713:7: note: in expansion of macro 'sound_library_'
 1713 |       sound_library_.SayNumber(battery_monitor.battery(), SAY_DECIMAL);
      |       ^~~~~~~~~~~~~~
ProffieOS/sound/sound_library.h:610:64: error: template argument 1 is invalid
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                                                ^
ProffieOS/props/saber_BC_buttons_personal.h:1714:7: note: in expansion of macro 'sound_library_'
 1714 |       sound_library_.SayVolts();
      |       ^~~~~~~~~~~~~~
ProffieOS/sound/sound_library.h:610:81: error: no matching function for call to 'getPtr<<expression error> >()'
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                                                                 ^
ProffieOS/props/saber_BC_buttons_personal.h:1714:7: note: in expansion of macro 'sound_library_'
 1714 |       sound_library_.SayVolts();
      |       ^~~~~~~~~~~~~~
In file included from ProffieOS/common/preset.h:4,
                 from ProffieOS/ProffieOS.ino:767:
ProffieOS/common/malloc_helper.h:133:8: note: candidate: 'template<class CLASS> CLASS* getPtr()'
  133 | CLASS* getPtr() {
      |        ^~~~~~
ProffieOS/common/malloc_helper.h:133:8: note:   template argument deduction/substitution failed:
In file included from ProffieOS/props/prop_base.h:5,
                 from ProffieOS/props/saber_BC_buttons_personal.h:1333,
                 from ProffieOS/config/BC_2ndSister_7.x_Official_Dual_Blade.h:204,
                 from ProffieOS/ProffieOS.ino:834:
ProffieOS/sound/sound_library.h:610:81: error: template argument 1 is invalid
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                                                                 ^
ProffieOS/props/saber_BC_buttons_personal.h:1714:7: note: in expansion of macro 'sound_library_'
 1714 |       sound_library_.SayVolts();
      |       ^~~~~~~~~~~~~~
ProffieOS/sound/sound_library.h:610:64: error: template argument 1 is invalid
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                                                ^
ProffieOS/props/saber_BC_buttons_personal.h:1720:7: note: in expansion of macro 'sound_library_'
 1720 |       sound_library_.SayNumber(battery_monitor.battery_percent(), SAY_WHOLE);
      |       ^~~~~~~~~~~~~~
ProffieOS/sound/sound_library.h:610:81: error: no matching function for call to 'getPtr<<expression error> >()'
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                                                                 ^
ProffieOS/props/saber_BC_buttons_personal.h:1720:7: note: in expansion of macro 'sound_library_'
 1720 |       sound_library_.SayNumber(battery_monitor.battery_percent(), SAY_WHOLE);
      |       ^~~~~~~~~~~~~~
In file included from ProffieOS/common/preset.h:4,
                 from ProffieOS/ProffieOS.ino:767:
ProffieOS/common/malloc_helper.h:133:8: note: candidate: 'template<class CLASS> CLASS* getPtr()'
  133 | CLASS* getPtr() {
      |        ^~~~~~
ProffieOS/common/malloc_helper.h:133:8: note:   template argument deduction/substitution failed:
In file included from ProffieOS/props/prop_base.h:5,
                 from ProffieOS/props/saber_BC_buttons_personal.h:1333,
                 from ProffieOS/config/BC_2ndSister_7.x_Official_Dual_Blade.h:204,
                 from ProffieOS/ProffieOS.ino:834:
ProffieOS/sound/sound_library.h:610:81: error: template argument 1 is invalid
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                                                                 ^
ProffieOS/props/saber_BC_buttons_personal.h:1720:7: note: in expansion of macro 'sound_library_'
 1720 |       sound_library_.SayNumber(battery_monitor.battery_percent(), SAY_WHOLE);
      |       ^~~~~~~~~~~~~~
ProffieOS/sound/sound_library.h:610:64: error: template argument 1 is invalid
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                                                ^
ProffieOS/props/saber_BC_buttons_personal.h:1721:7: note: in expansion of macro 'sound_library_'
 1721 |       sound_library_.SayPercent();
      |       ^~~~~~~~~~~~~~
ProffieOS/sound/sound_library.h:610:81: error: no matching function for call to 'getPtr<<expression error> >()'
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                                                                 ^
ProffieOS/props/saber_BC_buttons_personal.h:1721:7: note: in expansion of macro 'sound_library_'
 1721 |       sound_library_.SayPercent();
      |       ^~~~~~~~~~~~~~
In file included from ProffieOS/common/preset.h:4,
                 from ProffieOS/ProffieOS.ino:767:
ProffieOS/common/malloc_helper.h:133:8: note: candidate: 'template<class CLASS> CLASS* getPtr()'
  133 | CLASS* getPtr() {
      |        ^~~~~~
ProffieOS/common/malloc_helper.h:133:8: note:   template argument deduction/substitution failed:
In file included from ProffieOS/props/prop_base.h:5,
                 from ProffieOS/props/saber_BC_buttons_personal.h:1333,
                 from ProffieOS/config/BC_2ndSister_7.x_Official_Dual_Blade.h:204,
                 from ProffieOS/ProffieOS.ino:834:
ProffieOS/sound/sound_library.h:610:81: error: template argument 1 is invalid
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                                                                 ^
ProffieOS/props/saber_BC_buttons_personal.h:1721:7: note: in expansion of macro 'sound_library_'
 1721 |       sound_library_.SayPercent();
      |       ^~~~~~~~~~~~~~
In file included from ProffieOS/ProffieOS.ino:151:
ProffieOS/props/saber_BC_buttons_personal.h: In member function 'void SaberBCButtons::ToggleSequentialQuote()':
ProffieOS/config/BC_2ndSister_7.x_Official_Dual_Blade.h:192:30: error: 'BCMenuSpec' was not declared in this scope
  192 |   #define MENU_SPEC_TEMPLATE BCMenuSpec
      |                              ^~~~~~~~~~
ProffieOS/sound/sound_library.h:604:64: note: in expansion of macro 'MENU_SPEC_TEMPLATE'
  604 | #  define FINAL_MENU_SPEC_TEMPLATE UpgradeSoundLibraryIfNeeded<MENU_SPEC_TEMPLATE, SL_TEMPLATE_NAME>::UPGRADED_SPEC
      |                                                                ^~~~~~~~~~~~~~~~~~
ProffieOS/sound/sound_library.h:610:40: note: in expansion of macro 'FINAL_MENU_SPEC_TEMPLATE'
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                        ^~~~~~~~~~~~~~~~~~~~~~~~
ProffieOS/props/saber_BC_buttons_personal.h:1800:27: note: in expansion of macro 'sound_library_'
 1800 |       sequential_quote_ ? sound_library_.SayEnabled() : sound_library_.SayRandom();
      |                           ^~~~~~~~~~~~~~
In file included from ProffieOS/props/prop_base.h:5,
                 from ProffieOS/props/saber_BC_buttons_personal.h:1333,
                 from ProffieOS/config/BC_2ndSister_7.x_Official_Dual_Blade.h:204,
                 from ProffieOS/ProffieOS.ino:834:
ProffieOS/sound/sound_library.h:604:100: error: template argument 1 is invalid
  604 | #  define FINAL_MENU_SPEC_TEMPLATE UpgradeSoundLibraryIfNeeded<MENU_SPEC_TEMPLATE, SL_TEMPLATE_NAME>::UPGRADED_SPEC
      |                                                                                                    ^
ProffieOS/sound/sound_library.h:610:40: note: in expansion of macro 'FINAL_MENU_SPEC_TEMPLATE'
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                        ^~~~~~~~~~~~~~~~~~~~~~~~
ProffieOS/props/saber_BC_buttons_personal.h:1800:27: note: in expansion of macro 'sound_library_'
 1800 |       sequential_quote_ ? sound_library_.SayEnabled() : sound_library_.SayRandom();
      |                           ^~~~~~~~~~~~~~
ProffieOS/sound/sound_library.h:610:64: error: template argument 1 is invalid
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                                                ^
ProffieOS/props/saber_BC_buttons_personal.h:1800:27: note: in expansion of macro 'sound_library_'
 1800 |       sequential_quote_ ? sound_library_.SayEnabled() : sound_library_.SayRandom();
      |                           ^~~~~~~~~~~~~~
ProffieOS/sound/sound_library.h:610:81: error: no matching function for call to 'getPtr<<expression error> >()'
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                                                                 ^
ProffieOS/props/saber_BC_buttons_personal.h:1800:27: note: in expansion of macro 'sound_library_'
 1800 |       sequential_quote_ ? sound_library_.SayEnabled() : sound_library_.SayRandom();
      |                           ^~~~~~~~~~~~~~
In file included from ProffieOS/common/preset.h:4,
                 from ProffieOS/ProffieOS.ino:767:
ProffieOS/common/malloc_helper.h:133:8: note: candidate: 'template<class CLASS> CLASS* getPtr()'
  133 | CLASS* getPtr() {
      |        ^~~~~~
ProffieOS/common/malloc_helper.h:133:8: note:   template argument deduction/substitution failed:
In file included from ProffieOS/props/prop_base.h:5,
                 from ProffieOS/props/saber_BC_buttons_personal.h:1333,
                 from ProffieOS/config/BC_2ndSister_7.x_Official_Dual_Blade.h:204,
                 from ProffieOS/ProffieOS.ino:834:
ProffieOS/sound/sound_library.h:610:81: error: template argument 1 is invalid
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                                                                 ^
ProffieOS/props/saber_BC_buttons_personal.h:1800:27: note: in expansion of macro 'sound_library_'
 1800 |       sequential_quote_ ? sound_library_.SayEnabled() : sound_library_.SayRandom();
      |                           ^~~~~~~~~~~~~~
ProffieOS/sound/sound_library.h:610:64: error: template argument 1 is invalid
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                                                ^
ProffieOS/props/saber_BC_buttons_personal.h:1800:57: note: in expansion of macro 'sound_library_'
 1800 |       sequential_quote_ ? sound_library_.SayEnabled() : sound_library_.SayRandom();
      |                                                         ^~~~~~~~~~~~~~
ProffieOS/sound/sound_library.h:610:81: error: no matching function for call to 'getPtr<<expression error> >()'
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                                                                 ^
ProffieOS/props/saber_BC_buttons_personal.h:1800:57: note: in expansion of macro 'sound_library_'
 1800 |       sequential_quote_ ? sound_library_.SayEnabled() : sound_library_.SayRandom();
      |                                                         ^~~~~~~~~~~~~~
In file included from ProffieOS/common/preset.h:4,
                 from ProffieOS/ProffieOS.ino:767:
ProffieOS/common/malloc_helper.h:133:8: note: candidate: 'template<class CLASS> CLASS* getPtr()'
  133 | CLASS* getPtr() {
      |        ^~~~~~
ProffieOS/common/malloc_helper.h:133:8: note:   template argument deduction/substitution failed:
In file included from ProffieOS/props/prop_base.h:5,
                 from ProffieOS/props/saber_BC_buttons_personal.h:1333,
                 from ProffieOS/config/BC_2ndSister_7.x_Official_Dual_Blade.h:204,
                 from ProffieOS/ProffieOS.ino:834:
ProffieOS/sound/sound_library.h:610:81: error: template argument 1 is invalid
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                                                                 ^
ProffieOS/props/saber_BC_buttons_personal.h:1800:57: note: in expansion of macro 'sound_library_'
 1800 |       sequential_quote_ ? sound_library_.SayEnabled() : sound_library_.SayRandom();
      |                                                         ^~~~~~~~~~~~~~
In file included from ProffieOS/ProffieOS.ino:151:
ProffieOS/props/saber_BC_buttons_personal.h: In member function 'virtual bool SaberBCButtons::Event2(BUTTON, EVENT, uint32_t)':
ProffieOS/config/BC_2ndSister_7.x_Official_Dual_Blade.h:192:30: error: 'BCMenuSpec' was not declared in this scope
  192 |   #define MENU_SPEC_TEMPLATE BCMenuSpec
      |                              ^~~~~~~~~~
ProffieOS/sound/sound_library.h:604:64: note: in expansion of macro 'MENU_SPEC_TEMPLATE'
  604 | #  define FINAL_MENU_SPEC_TEMPLATE UpgradeSoundLibraryIfNeeded<MENU_SPEC_TEMPLATE, SL_TEMPLATE_NAME>::UPGRADED_SPEC
      |                                                                ^~~~~~~~~~~~~~~~~~
ProffieOS/sound/sound_library.h:610:40: note: in expansion of macro 'FINAL_MENU_SPEC_TEMPLATE'
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                        ^~~~~~~~~~~~~~~~~~~~~~~~
ProffieOS/props/saber_BC_buttons_personal.h:2566:11: note: in expansion of macro 'sound_library_'
 2566 |           sound_library_.SayRevert();
      |           ^~~~~~~~~~~~~~
In file included from ProffieOS/props/prop_base.h:5,
                 from ProffieOS/props/saber_BC_buttons_personal.h:1333,
                 from ProffieOS/config/BC_2ndSister_7.x_Official_Dual_Blade.h:204,
                 from ProffieOS/ProffieOS.ino:834:
ProffieOS/sound/sound_library.h:604:100: error: template argument 1 is invalid
  604 | #  define FINAL_MENU_SPEC_TEMPLATE UpgradeSoundLibraryIfNeeded<MENU_SPEC_TEMPLATE, SL_TEMPLATE_NAME>::UPGRADED_SPEC
      |                                                                                                    ^
ProffieOS/sound/sound_library.h:610:40: note: in expansion of macro 'FINAL_MENU_SPEC_TEMPLATE'
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                        ^~~~~~~~~~~~~~~~~~~~~~~~
ProffieOS/props/saber_BC_buttons_personal.h:2566:11: note: in expansion of macro 'sound_library_'
 2566 |           sound_library_.SayRevert();
      |           ^~~~~~~~~~~~~~
ProffieOS/sound/sound_library.h:610:64: error: template argument 1 is invalid
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                                                ^
ProffieOS/props/saber_BC_buttons_personal.h:2566:11: note: in expansion of macro 'sound_library_'
 2566 |           sound_library_.SayRevert();
      |           ^~~~~~~~~~~~~~
ProffieOS/sound/sound_library.h:610:81: error: no matching function for call to 'getPtr<<expression error> >()'
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                                                                 ^
ProffieOS/props/saber_BC_buttons_personal.h:2566:11: note: in expansion of macro 'sound_library_'
 2566 |           sound_library_.SayRevert();
      |           ^~~~~~~~~~~~~~
In file included from ProffieOS/common/preset.h:4,
                 from ProffieOS/ProffieOS.ino:767:
ProffieOS/common/malloc_helper.h:133:8: note: candidate: 'template<class CLASS> CLASS* getPtr()'
  133 | CLASS* getPtr() {
      |        ^~~~~~
ProffieOS/common/malloc_helper.h:133:8: note:   template argument deduction/substitution failed:
In file included from ProffieOS/props/prop_base.h:5,
                 from ProffieOS/props/saber_BC_buttons_personal.h:1333,
                 from ProffieOS/config/BC_2ndSister_7.x_Official_Dual_Blade.h:204,
                 from ProffieOS/ProffieOS.ino:834:
ProffieOS/sound/sound_library.h:610:81: error: template argument 1 is invalid
  610 | #define sound_library_ (*getPtr<MKSPEC<FINAL_MENU_SPEC_TEMPLATE>::SoundLibrary>())
      |                                                                                 ^
ProffieOS/props/saber_BC_buttons_personal.h:2566:11: note: in expansion of macro 'sound_library_'
 2566 |           sound_library_.SayRevert();
      |           ^~~~~~~~~~~~~~
exit status 1
Error compiling for board Proffieboard V2.


This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

Unfortunately I still don’t know what’s going on.
I tried doing something similar to what you are doing, but did not get an error like this.
If you can send me a PM with a full zip file I can figure it out.

I’m working on testing the menu system, and I managed to confuse myself with the “Select Color” prompt.

What it really does is the “copy” part of “copy and paste”, meaning that it remembers the color so you can use it elsewhere later. Since I find “Select Color” confusing, I’m thinking that it should say something else, like maybe…

  • Copy Color
  • Store Color
  • Remember Color
  • Something else? (if so, what?)
0 voters

Copy color seems most straight forward to me.

I could see this the other way around though too. I suppose to better answer the question: what does the full interaction look like?

I personally would, and I could see others thinking similarly, expect “Copy Color” to be a single, complete action. I expect when you describe how things are supposed to work, that won’t make sense, but that’s my gut understanding of the phrase without knowing the system.

It’s rather verbose and maybe a bad idea for what to actually say, but a succinct-ish explanation that makes sense to me would be “Select Color To Copy” and “Copy Selected Color”

I don’t know how much context the menus will provide to make things more clear, if any.

Although, since the next action might be “Apply selected color…”, then select color makes more sense.
Again, this comes down to having a menu flowchart in front of you the first few times using this. It would make perfect sense if you could visually see where you were going with what you got.

As designed, there is an entire menu for “modifying” a color. While in this menu, all blades will show the color, so I don’t think there is any question of which color we are talking about.

Right, it’s not a question of what color is being operated on, but rather what that operation is and how it works? As I understand it your poll was asking what makes most sense as a descriptor message to convey what the operation would do if selected?

So given what NoSloppy just noted about the next step being to “Apply selected color” then it sounds like what I had in mind is at least somewhat correct, and so my proposed descriptors were intended to provide clarity to the current “Select Color” by specifying why you would want to select the color/what selection is for…

It’s possible I’m misunderstanding your initial question though.

My original confusion is that “select color” seems like I’m entering a sub-menu to select from a list of colors, and I think that applies to “select color to copy” as well.

Maybe something like “select current color” would be better? (Possibly replace “select” with “copy”, “store” or “remember”.)

Ah, I see the conflicting verbiage and the potential confusion now.

My gut word would be “grab,” but that’s probably because I’ve worked with APIs that use that kind of phrasing… thinking about it now with clarity, I think that “copy” or “store” (and then maybe “apply copied color”?) probably do make the most sense.

Apologies for perhaps unnecessary back and forth :sweat_smile:

This^.
“Select current color”.
Or “Select and copy current color” so it’s super clear?
I have to stop updating the V2 voice packs because I’m sure there’s more changes to come.

“capture”?

The one I like best is:

&

or “Paste selected color…”

the UK (a.k.a. GB) female is my Google assistant voice choice, so that’s cool. Somewhat Lara Croft-ish I always think.

Anyway, I did that as well, also AU and IN.
Then I went nuts and signed up for a free trial of Google Cloud and made some tweaks for API keys and stuff for auth to make it work.
I got some more voices out of it, some premium ones, some Male ones too.

Here’s the current collection:

https://www.dropbox.com/scl/fo/egwwbojl7cd95c3zo6d19/AO1btmA5QSyg92MciayCRCY?rlkey=f0bzwwi9lkytf8zgo4tt3n828&dl=0

I like voice_en-GB-Wavenet-D.

I have Siri set to female Irish for my own personal F.R.I.D.A.Y.