'warning C4709: оператор запятой в выражении индекса массива' - но никакой запятой не видно нигде!

Возьмите этот маленький пример кода:

struct Test{
    operator int() const{
        return 0;
    }
};

Test test(){
    return Test();
}

int main(){
    int arr[10];
    arr[test()] = 5;
}

Компиляция в Visual Studio 2010 с /W4 генерирует указанное предупреждение. Интересно, что если я добавлю простой конструктор по умолчанию, предупреждение внезапно исчезнет. Кроме того, он работает только в этом созвездии. Если я удалю вызов функции или не верну пользовательский тип, предупреждение исчезнет. Кроме того, как и ожидалось, GCC не дает такого предупреждения.

Итак, могу ли я принять это предупреждение с приведенным выше кодом как ошибку в Visual Studio или есть ли что-то еще, чем кажется? Было бы очень удивительно, если не сказать больше.


Изменить. Создал отчет об ошибке в Microsoft Connect.

Ответ 1

Определенно это ошибка, вводящая в заблуждение.