[Bug c++/92338] New: double/float thought (ambiguous) candidate for C-array index. (Non numeric types aren't.)
mick.pearson at wildblue dot net
gcc-bugzilla@gcc.gnu.org
Sun Nov 3 18:08:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92338
Bug ID: 92338
Summary: double/float thought (ambiguous) candidate for C-array
index. (Non numeric types aren't.)
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: mick.pearson at wildblue dot net
Target Milestone: ---
A double (float) conversion is considered candidate for indexing a C-array. A
double (float) isn't allowed to access an array normally, so it's not good that
this makes an int conversion operator "ambiguous".
I tested this with some online GCC compilers... unfortunately none of them give
the GCC version. I can't conveniently upgrade my GCC.
{{{
#include <stdio.h>
struct Test
{
operator int(){ return 0; }
operator double(){ return 0; }
};
int main()
{
printf("Hello World");
int test[2] = {};
int test2 = test[Test()];
return 0;
}
}}}
{{{
Error(s):
source_file.cpp: In function ‘int main()’:
source_file.cpp:22:28: error: conversion from ‘Test’ to ‘long int’ is ambiguous
int test2 = test[Test()];
^
source_file.cpp:14:5: note: candidate: Test::operator double()
operator double(){ return 0; }
^
source_file.cpp:13:5: note: candidate: Test::operator int()
operator int(){ return 0; }
^
source_file.cpp:22:9: warning: unused variable ‘test2’ [-Wunused-variable]
int test2 = test[Test()];
^
}}}
More information about the Gcc-bugs
mailing list