# -fdump-lang-class-details In file included from foo.cpp:2:0: PinDefinition.h:11:174: error: cannot convert 'int' to 'const PinDefinition::byte' in initialization constexpr byte pinMaske[] = {0b1,0b10,0b100,0b1000,0b10000,0b100000,0b1000000,0b10000000,0b1,0b10,0b100,0b1000,0b10000,0b100000,0b1,0b10,0b100,0b1000,0b10000,0b100000,}; ^ PinDefinition.h:11:174: error: cannot convert 'int' to 'const PinDefinition::byte' in initialization PinDefinition.h:11:174: error: cannot convert 'int' to 'const PinDefinition::byte' in initialization PinDefinition.h:11:174: error: cannot convert 'int' to 'const PinDefinition::byte' in initialization PinDefinition.h:11:174: error: cannot convert 'int' to 'const PinDefinition::byte' in initialization PinDefinition.h:11:174: error: cannot convert 'int' to 'const PinDefinition::byte' in initialization PinDefinition.h:11:174: error: cannot convert 'int' to 'const PinDefinition::byte' in initialization PinDefinition.h:11:174: error: cannot convert 'int' to 'const PinDefinition::byte' in initialization PinDefinition.h:11:174: error: cannot convert 'int' to 'const PinDefinition::byte' in initialization PinDefinition.h:11:174: error: cannot convert 'int' to 'const PinDefinition::byte' in initialization PinDefinition.h:11:174: error: cannot convert 'int' to 'const PinDefinition::byte' in initialization PinDefinition.h:11:174: error: cannot convert 'int' to 'const PinDefinition::byte' in initialization PinDefinition.h:11:174: error: cannot convert 'int' to 'const PinDefinition::byte' in initialization PinDefinition.h:11:174: error: cannot convert 'int' to 'const PinDefinition::byte' in initialization PinDefinition.h:11:174: error: cannot convert 'int' to 'const PinDefinition::byte' in initialization PinDefinition.h:11:174: error: cannot convert 'int' to 'const PinDefinition::byte' in initialization PinDefinition.h:11:174: error: cannot convert 'int' to 'const PinDefinition::byte' in initialization PinDefinition.h:11:174: error: cannot convert 'int' to 'const PinDefinition::byte' in initialization PinDefinition.h:11:174: error: cannot convert 'int' to 'const PinDefinition::byte' in initialization PinDefinition.h:11:174: error: cannot convert 'int' to 'const PinDefinition::byte' in initialization In file included from foo.cpp:2:0: PinDefinition.h:12:179: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization constexpr Register portList[] = {&PORTD,&PORTD,&PORTD,&PORTD,&PORTD,&PORTD,&PORTD,&PORTD,&PORTB,&PORTB,&PORTB,&PORTB,&PORTB,&PORTB,&PORTC,&PORTC,&PORTC,&PORTC,&PORTC,&PORTC,}; ^ PinDefinition.h:12:179: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:12:179: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:12:179: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:12:179: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:12:179: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:12:179: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:12:179: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:12:179: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:12:179: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:12:179: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:12:179: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:12:179: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:12:179: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:12:179: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:12:179: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:12:179: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:12:179: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:12:179: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:12:179: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization In file included from foo.cpp:2:0: PinDefinition.h:13:159: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization constexpr Register ddrList[] = {&DDRD,&DDRD,&DDRD,&DDRD,&DDRD,&DDRD,&DDRD,&DDRD,&DDRB,&DDRB,&DDRB,&DDRB,&DDRB,&DDRB,&DDRC,&DDRC,&DDRC,&DDRC,&DDRC,&DDRC,}; ^ PinDefinition.h:13:159: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:13:159: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:13:159: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:13:159: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:13:159: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:13:159: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:13:159: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:13:159: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:13:159: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:13:159: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:13:159: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:13:159: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:13:159: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:13:159: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:13:159: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:13:159: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:13:159: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:13:159: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:13:159: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization In file included from foo.cpp:2:0: PinDefinition.h:14:159: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization constexpr Register pinList[] = {&PIND,&PIND,&PIND,&PIND,&PIND,&PIND,&PIND,&PIND,&PINB,&PINB,&PINB,&PINB,&PINB,&PINB,&PINC,&PINC,&PINC,&PINC,&PINC,&PINC,}; ^ PinDefinition.h:14:159: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:14:159: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:14:159: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:14:159: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:14:159: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:14:159: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:14:159: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:14:159: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:14:159: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:14:159: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:14:159: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:14:159: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:14:159: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:14:159: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:14:159: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:14:159: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:14:159: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:14:159: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h:14:159: error: cannot convert 'volatile uint8_t* {aka volatile unsigned char*}' to 'const Register {aka volatile PinDefinition::byte* const}' in initialization PinDefinition.h: In function 'constexpr volatile PinDefinition::byte* PinDefinition::getOutPort(PinDefinition::byte)': PinDefinition.h:19:28: error: array subscript is not an integer return portList[pin]; ^ PinDefinition.h:20:7: error: body of constexpr function 'constexpr volatile PinDefinition::byte* PinDefinition::getOutPort(PinDefinition::byte)' not a return-statement }; ^ PinDefinition.h: In function 'constexpr volatile PinDefinition::byte* PinDefinition::getDdrPort(PinDefinition::byte)': PinDefinition.h:24:27: error: array subscript is not an integer return ddrList[pin]; ^ PinDefinition.h:25:7: error: body of constexpr function 'constexpr volatile PinDefinition::byte* PinDefinition::getDdrPort(PinDefinition::byte)' not a return-statement }; ^ PinDefinition.h: In function 'constexpr volatile PinDefinition::byte* PinDefinition::getInPort(PinDefinition::byte)': PinDefinition.h:29:27: error: array subscript is not an integer return pinList[pin]; ^ PinDefinition.h:30:7: error: body of constexpr function 'constexpr volatile PinDefinition::byte* PinDefinition::getInPort(PinDefinition::byte)' not a return-statement }; ^ PinDefinition.h: In function 'constexpr PinDefinition::byte PinDefinition::getMaske(PinDefinition::byte)': PinDefinition.h:35:28: error: array subscript is not an integer return pinMaske[pin]; ^ PinDefinition.h:36:7: error: body of constexpr function 'constexpr PinDefinition::byte PinDefinition::getMaske(PinDefinition::byte)' not a return-statement }; ^ PinDefinition.h: In member function 'void PinDefinition::InputPin::init()': PinDefinition.h:47:36: error: no match for 'operator~' (operand type is 'PinDefinition::byte') *getDdrPort(arduinoPin) &= ~getMaske(arduinoPin); ^~~~~~~~~~~~~~~~~~~~~ PinDefinition.h: In member function 'void PinDefinition::InputPin::initPullup()': PinDefinition.h:52:36: error: no match for 'operator~' (operand type is 'PinDefinition::byte') *getDdrPort(arduinoPin) &= ~getMaske(arduinoPin); ^~~~~~~~~~~~~~~~~~~~~ PinDefinition.h:53:33: error: no match for 'operator|=' (operand types are 'volatile PinDefinition::byte' and 'PinDefinition::byte') *getOutPort(arduinoPin) |= getMaske(arduinoPin); ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~ PinDefinition.h: In member function 'bool PinDefinition::InputPin::isHigh()': PinDefinition.h:58:37: error: no match for 'operator&' (operand types are 'volatile PinDefinition::byte' and 'PinDefinition::byte') return *getInPort(arduinoPin) & getMaske(arduinoPin); ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~ PinDefinition.h: In member function 'void PinDefinition::OutputPin::init()': PinDefinition.h:69:33: error: no match for 'operator|=' (operand types are 'volatile PinDefinition::byte' and 'PinDefinition::byte') *getDdrPort(arduinoPin) |= getMaske(arduinoPin); ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~ PinDefinition.h: In member function 'bool PinDefinition::OutputPin::isHigh()': PinDefinition.h:74:38: error: no match for 'operator&' (operand types are 'volatile PinDefinition::byte' and 'PinDefinition::byte') return *getOutPort(arduinoPin) & getMaske(arduinoPin); ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~ PinDefinition.h: In member function 'PinDefinition::OutputPin::operator bool()': PinDefinition.h:79:38: error: no match for 'operator&' (operand types are 'volatile PinDefinition::byte' and 'PinDefinition::byte') return *getOutPort(arduinoPin) & getMaske(arduinoPin); ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~ PinDefinition.h: In member function 'void PinDefinition::OutputPin::setHigh()': PinDefinition.h:84:31: error: no match for 'operator|=' (operand types are 'volatile PinDefinition::byte' and 'PinDefinition::byte') *getOutPort(arduinoPin) |= getMaske(arduinoPin); ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~ PinDefinition.h: In member function 'void PinDefinition::OutputPin::setLow()': PinDefinition.h:89:34: error: no match for 'operator~' (operand type is 'PinDefinition::byte') *getOutPort(arduinoPin) &= ~getMaske(arduinoPin); ^~~~~~~~~~~~~~~~~~~~~ PinDefinition.h: In member function 'void PinDefinition::RelaisINV::init()': PinDefinition.h:110:31: error: no match for 'operator|=' (operand types are 'volatile PinDefinition::byte' and 'PinDefinition::byte') *getOutPort(arduinoPin) |= getMaske(arduinoPin); // Pullup ein ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~ PinDefinition.h:111:31: error: no match for 'operator|=' (operand types are 'volatile PinDefinition::byte' and 'PinDefinition::byte') *getDdrPort(arduinoPin) |= getMaske(arduinoPin); // Ausgang ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~ foo.cpp: At global scope: foo.cpp:7:42: error: could not convert template argument '12' from 'int' to 'PinDefinition::byte' using Pad12 = PinDefinition::OutputPin<12>; ^ foo.cpp: In function 'void test()': foo.cpp:11:5: error: 'Pad12' was not declared in this scope Pad12{}.set(val); ^~~~~ foo.cpp:11:12: error: expected primary-expression before '.' token Pad12{}.set(val); ^ foo.cpp:12:10: error: expected ';' before '{' token Pad12{}.set(val^1); ^ foo.cpp:12:12: error: expected primary-expression before '.' token Pad12{}.set(val^1); ^ foo.cpp:13:10: error: expected ';' before '{' token Pad12{}.set(1); ^ foo.cpp:13:12: error: expected primary-expression before '.' token Pad12{}.set(1); ^ foo.cpp:14:10: error: expected ';' before '{' token Pad12{}.set(0); ^ foo.cpp:14:12: error: expected primary-expression before '.' token Pad12{}.set(0); ^ foo.cpp:15:10: error: expected ';' before '{' token Pad12{}.set(0); ^ foo.cpp:15:12: error: expected primary-expression before '.' token Pad12{}.set(0); ^ foo.cpp:16:10: error: expected ';' before '{' token Pad12{}.set(0); ^ foo.cpp:16:12: error: expected primary-expression before '.' token Pad12{}.set(0); ^ foo.cpp: At global scope: foo.cpp:28:1: error: 'Pad12' does not name a type Pad12 pad12{}; ^~~~~ foo.cpp: In function 'void test2()': foo.cpp:32:5: error: 'pad12' was not declared in this scope pad12.set(val); ^~~~~