Возьмите этот маленький пример кода:
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.