If I revert to 0.2.20, the errors go away.
In file included from /Users/jjs/Desktop/Sketchbook/libraries/M5StackChan/src/drivers/PY32IOExpander/PY32IOExpander.cpp:6:
/Users/jjs/Desktop/Sketchbook/libraries/M5StackChan/src/drivers/PY32IOExpander/PY32IOExpander.hpp:26:10: error: conflicting return type specified for 'virtual void m5::PY32IOExpander_Class::setDirection(uint8_t, bool)'
26 | void setDirection(uint8_t pin, bool direction) override;
| ^~~~~~~~~~~~
In file included from /Users/jjs/Desktop/Sketchbook/libraries/M5Unified/src/M5Unified.hpp:68,
from /Users/jjs/Desktop/Sketchbook/libraries/M5StackChan/src/drivers/PY32IOExpander/PY32IOExpander.hpp:9:
/Users/jjs/Desktop/Sketchbook/libraries/M5Unified/src/utility/IOExpander_Base.hpp:33:18: note: overridden function is 'virtual bool m5::IOExpander_Base::setDirection(uint8_t, bool)'
33 | virtual bool setDirection(uint8_t pin, bool direction) = 0;
| ^~~~~~~~~~~~
/Users/jjs/Desktop/Sketchbook/libraries/M5StackChan/src/drivers/PY32IOExpander/PY32IOExpander.hpp:28:10: error: 'void m5::PY32IOExpander_Class::enablePull(uint8_t, bool)' marked 'override', but does not override
28 | void enablePull(uint8_t pin, bool enablePull) override;
| ^~~~~~~~~~
/Users/jjs/Desktop/Sketchbook/libraries/M5StackChan/src/drivers/PY32IOExpander/PY32IOExpander.hpp:31:10: error: 'void m5::PY32IOExpander_Class::setPullMode(uint8_t, bool)' marked 'override', but does not override
31 | void setPullMode(uint8_t pin, bool mode) override;
| ^~~~~~~~~~~
/Users/jjs/Desktop/Sketchbook/libraries/M5StackChan/src/drivers/PY32IOExpander/PY32IOExpander.hpp:36:10: error: conflicting return type specified for 'virtual void m5::PY32IOExpander_Class::setHighImpedance(uint8_t, bool)'
36 | void setHighImpedance(uint8_t pin, bool enable) override;
| ^~~~~~~~~~~~~~~~
/Users/jjs/Desktop/Sketchbook/libraries/M5Unified/src/utility/IOExpander_Base.hpp:42:18: note: overridden function is 'virtual bool m5::IOExpander_Base::setHighImpedance(uint8_t, bool)'
42 | virtual bool setHighImpedance(uint8_t pin, bool enable) = 0;
| ^~~~~~~~~~~~~~~~
/Users/jjs/Desktop/Sketchbook/libraries/M5StackChan/src/drivers/PY32IOExpander/PY32IOExpander.hpp:40:10: error: conflicting return type specified for 'virtual void m5::PY32IOExpander_Class::digitalWrite(uint8_t, bool)'
40 | void digitalWrite(uint8_t pin, bool level) override;
| ^~~~~~~~~~~~
/Users/jjs/Desktop/Sketchbook/libraries/M5Unified/src/utility/IOExpander_Base.hpp:48:18: note: overridden function is 'virtual bool m5::IOExpander_Base::digitalWrite(uint8_t, bool)'
48 | virtual bool digitalWrite(uint8_t pin, bool level) = 0;
| ^~~~~~~~~~~~
/Users/jjs/Desktop/Sketchbook/libraries/M5StackChan/src/drivers/PY32IOExpander/PY32IOExpander.hpp:44:10: error: conflicting return type specified for 'virtual void m5::PY32IOExpander_Class::resetIrq()'
44 | void resetIrq() override;
| ^~~~~~~~
/Users/jjs/Desktop/Sketchbook/libraries/M5Unified/src/utility/IOExpander_Base.hpp:63:18: note: overridden function is 'virtual bool m5::IOExpander_Base::resetIrq()'
63 | virtual bool resetIrq() = 0;
| ^~~~~~~~
/Users/jjs/Desktop/Sketchbook/libraries/M5StackChan/src/drivers/PY32IOExpander/PY32IOExpander.hpp:46:10: error: conflicting return type specified for 'virtual void m5::PY32IOExpander_Class::disableIrq()'
46 | void disableIrq() override;
| ^~~~~~~~~~
/Users/jjs/Desktop/Sketchbook/libraries/M5Unified/src/utility/IOExpander_Base.hpp:67:18: note: overridden function is 'virtual bool m5::IOExpander_Base::disableIrq()'
67 | virtual bool disableIrq() = 0;
| ^~~~~~~~~~
/Users/jjs/Desktop/Sketchbook/libraries/M5StackChan/src/drivers/PY32IOExpander/PY32IOExpander.hpp:48:10: error: conflicting return type specified for 'virtual void m5::PY32IOExpander_Class::enableIrq()'
48 | void enableIrq() override;
| ^~~~~~~~~
/Users/jjs/Desktop/Sketchbook/libraries/M5Unified/src/utility/IOExpander_Base.hpp:71:18: note: overridden function is 'virtual bool m5::IOExpander_Base::enableIrq()'
71 | virtual bool enableIrq() = 0;
| ^~~~~~~~~
In file included from /Users/jjs/Desktop/Sketchbook/libraries/M5StackChan/src/M5StackChan.cpp:7:
/Users/jjs/Desktop/Sketchbook/libraries/M5StackChan/src/drivers/PY32IOExpander/PY32IOExpander.hpp:26:10: error: conflicting return type specified for 'virtual void m5::PY32IOExpander_Class::setDirection(uint8_t, bool)'
26 | void setDirection(uint8_t pin, bool direction) override;
| ^~~~~~~~~~~~
In file included from /Users/jjs/Desktop/Sketchbook/libraries/M5Unified/src/M5Unified.hpp:68,
from /Users/jjs/Desktop/Sketchbook/libraries/M5Unified/src/M5Unified.h:5,
from /Users/jjs/Desktop/Sketchbook/libraries/M5StackChan/src/utils/touch_sensor/../../drivers/Si12T/Si12T.h:5,
from /Users/jjs/Desktop/Sketchbook/libraries/M5StackChan/src/utils/touch_sensor/touch_sensor.h:7,
from /Users/jjs/Desktop/Sketchbook/libraries/M5StackChan/src/M5StackChan.h:7,
from /Users/jjs/Desktop/Sketchbook/libraries/M5StackChan/src/M5StackChan.cpp:6:
/Users/jjs/Desktop/Sketchbook/libraries/M5Unified/src/utility/IOExpander_Base.hpp:33:18: note: overridden function is 'virtual bool m5::IOExpander_Base::setDirection(uint8_t, bool)'
33 | virtual bool setDirection(uint8_t pin, bool direction) = 0;
| ^~~~~~~~~~~~
/Users/jjs/Desktop/Sketchbook/libraries/M5StackChan/src/drivers/PY32IOExpander/PY32IOExpander.hpp:28:10: error: 'void m5::PY32IOExpander_Class::enablePull(uint8_t, bool)' marked 'override', but does not override
28 | void enablePull(uint8_t pin, bool enablePull) override;
| ^~~~~~~~~~
/Users/jjs/Desktop/Sketchbook/libraries/M5StackChan/src/drivers/PY32IOExpander/PY32IOExpander.hpp:31:10: error: 'void m5::PY32IOExpander_Class::setPullMode(uint8_t, bool)' marked 'override', but does not override
31 | void setPullMode(uint8_t pin, bool mode) override;
| ^~~~~~~~~~~
/Users/jjs/Desktop/Sketchbook/libraries/M5StackChan/src/drivers/PY32IOExpander/PY32IOExpander.hpp:36:10: error: conflicting return type specified for 'virtual void m5::PY32IOExpander_Class::setHighImpedance(uint8_t, bool)'
36 | void setHighImpedance(uint8_t pin, bool enable) override;
| ^~~~~~~~~~~~~~~~
/Users/jjs/Desktop/Sketchbook/libraries/M5Unified/src/utility/IOExpander_Base.hpp:42:18: note: overridden function is 'virtual bool m5::IOExpander_Base::setHighImpedance(uint8_t, bool)'
42 | virtual bool setHighImpedance(uint8_t pin, bool enable) = 0;
| ^~~~~~~~~~~~~~~~
/Users/jjs/Desktop/Sketchbook/libraries/M5StackChan/src/drivers/PY32IOExpander/PY32IOExpander.hpp:40:10: error: conflicting return type specified for 'virtual void m5::PY32IOExpander_Class::digitalWrite(uint8_t, bool)'
40 | void digitalWrite(uint8_t pin, bool level) override;
| ^~~~~~~~~~~~
/Users/jjs/Desktop/Sketchbook/libraries/M5Unified/src/utility/IOExpander_Base.hpp:48:18: note: overridden function is 'virtual bool m5::IOExpander_Base::digitalWrite(uint8_t, bool)'
48 | virtual bool digitalWrite(uint8_t pin, bool level) = 0;
| ^~~~~~~~~~~~
/Users/jjs/Desktop/Sketchbook/libraries/M5StackChan/src/drivers/PY32IOExpander/PY32IOExpander.hpp:44:10: error: conflicting return type specified for 'virtual void m5::PY32IOExpander_Class::resetIrq()'
44 | void resetIrq() override;
| ^~~~~~~~
/Users/jjs/Desktop/Sketchbook/libraries/M5Unified/src/utility/IOExpander_Base.hpp:63:18: note: overridden function is 'virtual bool m5::IOExpander_Base::resetIrq()'
63 | virtual bool resetIrq() = 0;
| ^~~~~~~~
/Users/jjs/Desktop/Sketchbook/libraries/M5StackChan/src/drivers/PY32IOExpander/PY32IOExpander.hpp:46:10: error: conflicting return type specified for 'virtual void m5::PY32IOExpander_Class::disableIrq()'
46 | void disableIrq() override;
| ^~~~~~~~~~
/Users/jjs/Desktop/Sketchbook/libraries/M5Unified/src/utility/IOExpander_Base.hpp:67:18: note: overridden function is 'virtual bool m5::IOExpander_Base::disableIrq()'
67 | virtual bool disableIrq() = 0;
| ^~~~~~~~~~
/Users/jjs/Desktop/Sketchbook/libraries/M5StackChan/src/drivers/PY32IOExpander/PY32IOExpander.hpp:48:10: error: conflicting return type specified for 'virtual void m5::PY32IOExpander_Class::enableIrq()'
48 | void enableIrq() override;
| ^~~~~~~~~
/Users/jjs/Desktop/Sketchbook/libraries/M5Unified/src/utility/IOExpander_Base.hpp:71:18: note: overridden function is 'virtual bool m5::IOExpander_Base::enableIrq()'
71 | virtual bool enableIrq() = 0;
| ^~~~~~~~~
In file included from /Users/jjs/Library/Arduino15/packages/esp32/tools/esp-x32/2601/xtensa-esp-elf/include/c++/14.2.0/memory:78,
from /Users/jjs/Desktop/Sketchbook/libraries/M5GFX/src/lgfx/v1/platforms/esp32/../esp32/../../../utility/../internal/memory.h:13,
from /Users/jjs/Desktop/Sketchbook/libraries/M5GFX/src/lgfx/v1/platforms/esp32/../esp32/../../../utility/result.hpp:35,
from /Users/jjs/Desktop/Sketchbook/libraries/M5GFX/src/lgfx/v1/platforms/esp32/../esp32/common.hpp:22,
from /Users/jjs/Desktop/Sketchbook/libraries/M5GFX/src/lgfx/v1/platforms/esp32/../common.hpp:22,
from /Users/jjs/Desktop/Sketchbook/libraries/M5GFX/src/lgfx/v1/platforms/esp32/Bus_SPI.hpp:57,
from /Users/jjs/Desktop/Sketchbook/libraries/M5GFX/src/lgfx/v1/platforms/device.hpp:66,
from /Users/jjs/Desktop/Sketchbook/libraries/M5GFX/src/M5GFX.h:47,
from /Users/jjs/Desktop/Sketchbook/libraries/M5Unified/src/M5Unified.hpp:19:
/Users/jjs/Library/Arduino15/packages/esp32/tools/esp-x32/2601/xtensa-esp-elf/include/c++/14.2.0/bits/unique_ptr.h: In instantiation of 'std::__detail::__unique_ptr_t<_Tp> std::make_unique(_Args&& ...) [with _Tp = m5::PY32IOExpander_Class; _Args = {}; __detail::__unique_ptr_t<_Tp> = __detail::__unique_ptr_t<m5::PY32IOExpander_Class>]':
/Users/jjs/Desktop/Sketchbook/libraries/M5StackChan/src/M5StackChan.cpp:42:62: required from here
42 | _io_expander = std::make_unique<m5::PY32IOExpander_Class>();
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~
/Users/jjs/Library/Arduino15/packages/esp32/tools/esp-x32/2601/xtensa-esp-elf/include/c++/14.2.0/bits/unique_ptr.h:1076:30: error: invalid new-expression of abstract class type 'm5::PY32IOExpander_Class'
1076 | { return unique_ptr<_Tp>(new _Tp(std::forward<_Args>(__args)...)); }
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/jjs/Desktop/Sketchbook/libraries/M5StackChan/src/drivers/PY32IOExpander/PY32IOExpander.hpp:12:7: note: because the following virtual functions are pure within 'm5::PY32IOExpander_Class':
12 | class PY32IOExpander_Class : public IOExpander_Base {
| ^~~~~~~~~~~~~~~~~~~~
/Users/jjs/Desktop/Sketchbook/libraries/M5Unified/src/utility/IOExpander_Base.hpp:38:18: note: 'virtual bool m5::IOExpander_Base::setPullMode(uint8_t, gpio_pull_t)'
38 | virtual bool setPullMode(uint8_t pin, gpio_pull_t mode) = 0;
| ^~~~~~~~~~~
Multiple libraries were found for "WiFi.h"
Used: /Users/jjs/Library/Arduino15/packages/esp32/hardware/esp32/3.3.11/libraries/WiFi
Not used: /Users/jjs/Desktop/Sketchbook/libraries/WiFiNINA
exit status 1
Compilation error: exit status 1
If I revert to 0.2.20, the errors go away.
Suggestions?