Шаблон с пакетом параметров компилируется с использованием avr-gcc, но не с использованием Arduino IDE. ⇐ C++

Программы на C++. Форум разработчиков
Anonymous
Шаблон с пакетом параметров компилируется с использованием avr-gcc, но не с использованием Arduino IDE.

Сообщение Anonymous »

Я пытаюсь написать общий шаблон для печати для проекта Arduino. При этом я столкнулся с непонятной мне ошибкой компилятора, поэтому сделал минимально воспроизводимый пример.
template
void print_all(Print* const (&ps)[2], T v1, T2... v2) {
ps[0]->print(v1);
ps[0]->flush();
ps[1]->print(v1);
ps[1]->flush();
print_all(ps, v2...);
}
void print_all(Print* const (&ps)[2]) {
return;
}

void setup() {
print_all({&Serial1, &Serial2}, 1.0, "abc", 5ul);
}

void loop() {
}


Я получаю ошибку: ожидается ')' перед ';' токен без информации о номере строки. Если я вставлю пустую строку в начало файла, ошибка компилятора изменится на
error: expected ')' before ';' token
1 |
| ^
| )

Я попробовал это с avr-gcc версии 7.3.0 (официальная плата arduino avr) и 14.1.0 (с использованием плат Arch linux arduino avr) и в любом случае получил ту же ошибку.
Я попробовал это с avr-gcc версии 7.3.0 (официальная плата arduino avr) и 14.1.0 (с использованием плат Arch Linux arduino avr) и в любом случае получил ту же ошибку.
p>
Некоторое время я экспериментировал и в конце концов поместил код в Compiler Explorer, используя для компиляции avr-gcc вместо Arduino IDE. Мне пришлось предоставить несколько заглушек, чтобы все скомпилировалось, но, похоже, все работает так, как я и ожидал. Так почему же мой код работает в проводнике компилятора, но не в Arduino IDE?
код с поддержкой заглушек методов
class Print{
public:
virtual void print(unsigned long i) {
}
virtual void print(double i) {
}
virtual void print(const char* i) {
}
virtual void flush() {

}
};

class Serial: public Print {};

Serial serial1 = Serial{};
Serial serial2 = Serial{};

template
void print_all(Print* const (&ps)[2], T v1, T2... v2) {
ps[0]->print(v1);
ps[0]->flush();
ps[1]->print(v1);
ps[1]->flush();
print_all(ps, v2...);
}
void print_all(Print* const (&ps)[2]) {
return;
}

int main() {
Print* const ps[] = {&serial1, &serial2};
print_all(ps, 1.0, "abc", 5ul);
}


Подробнее здесь: https://stackoverflow.com/questions/789 ... rduino-ide

Вернуться в «C++»