Is it possible to call return in a synchronized block ? template <int N> int SafeRingBufferN<N>::read_char() { synchronized { return RingBufferN<N>::read_char(); } } -> template <int N> int SafeRingBufferN<N>::read_char() { int ret = 0; synchronized { ret = RingBufferN<N>::read_char(); } return ret; } At least this fix the compilation warning Arduino15\packages\arduino\hardware\samd\1.8.11\cores\arduino\USB\SAMD21_USBDevice.h uint32_t len = 0; synchronized { len = _rx_buffer.availableForStore(); }