Прошу прощения за пятничный сумбур, очень уж домой хотелось :-)
Код
Building file: ../Drivers/AccelDrv.cpp
Invoking: Cross ARM C++ Compiler
arm-none-eabi-g++ -mcpu=cortex-m3 -mthumb -Os -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -flto
-Wuninitialized -g -DSTM32F105xC -DSTM32F10X_CL -I /skipped/ -std=gnu++11 -fabi-version=0 -fno-exceptions -fno-rtti
-MMD -MP -MF"Drivers/AccelDrv.d" -MT"Drivers/AccelDrv.o" -c -o "Drivers/AccelDrv.o" "../Drivers/AccelDrv.cpp"
In file included from ../Drivers/AccelDrv.cpp:8:0:
../Drivers/AccelDrv.h:39:30: error: reinterpret_cast from integer to pointer
static PeriphBit<(uintptr_t)&EXTI->IMR, EXTI_IMR_MR1> ExtiUnmaskIRQ;
^~~~~~~~~~
../Drivers/AccelDrv.h:39:54: note: in template argument for type 'unsigned int'
static PeriphBit<(uintptr_t)&EXTI->IMR, EXTI_IMR_MR1> ExtiUnmaskIRQ;
Версия стандарта не влияет. Уровень оптимизации (проверял -Os и -Og) не влияет.
Ещё более корявое решение
static PeriphBit<EXTI_BASE + offsetof(EXTI_TypeDef, IMR), EXTI_IMR_MR1> ExtiUnmaskIRQ;
работает.