Спасибо, что сообщили, и да, похоже на баг. Проявляется в версиях 3.10.1 - 3.10.10, отсутствует в 3.2.3664.
const TD_0 = 0; enum { TD_1 = 1 }; new Text: textdraws[10]; main() { textdraws[TD_0] = TextDrawCreate(0.0, 0.0, "-"); // на этой строке нет никаких предупреждений/ошибок textdraws[TD_1] = TextDrawCreate(0.0, 0.0, "-"); // warning 213: tag mismatch: expected tag none ("_"), but found "Text" }
Судя по всему, проблема в том, что если в качестве индекса для ячейки массива используется элемент перечисления (вместо обычной константы, объявленной с помощью ключевого слова const), то тег такого элемента "перезаписывает" тег массива, из-за чего компилятор думает, что у ячейки массива тег "_:", а не "Text:".
В принципе такая перезапись тега может быть использована, когда элемент перечисления принадлежит именованному массиву:
enum ePlayerInfo { Float:pHealth }; new player_info[MAX_PLAYERS][ePlayerInfo]; // ... // `player_info` имеет тег `_:` (т.е. без тега), но результирующий тег // перезаписывается тегом из `pHealth` player_info[playerid][pHealth] = 100.0;
что абсолютно логично, но соль в том, что, оказывается, это правило почему-то распространяется и на элементы анонимных перечислений (т.е. как в первом примере), чего по идее быть не должно, и таки этого нет в стоковом 3.2.3664.
Пока что я создал issue на GitHub: https://github.com/pawn-lang/compiler/issues/514
Исправление должно быть очень простым (достаточно добавить всего одну проверку, чтобы результирующий тег перезаписывался только если элемент перечисления принадлежит к именованному enum), но пока что желательно дождаться ответа от разработчиков; возможно, Y_Less что-нибудь возразит.