[Bug c++/68891] New: must use a typedef to declare a conversion to 'double (&)[3]'
mathieu.malaterre at gmail dot com
gcc-bugzilla@gcc.gnu.org
Mon Dec 14 10:03:00 GMT 2015
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68891
Bug ID: 68891
Summary: must use a typedef to declare a conversion to 'double
(&)[3]'
Product: gcc
Version: 5.2.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: mathieu.malaterre at gmail dot com
Target Milestone: ---
Per my understanding of C++ standard section §12.3.2, the following piece of
code should not compile:
$ cat c.cxx
#include <iostream>
struct V
{
(&operator double ())[3] {
return v;
}
double v[3];
};
static void Print( const double (&a)[3] )
{
std::cout << a[0] << "," << a[1] << "," << a[2] << std::endl;
}
int main()
{
V v = {0,1,2};
Print( v );
return 0;
}
Seems to be valid c++ for gcc 5.2.1:
$ g++ -Wall -W -pedantic c.cxx && ./a.out
0,1,2
The only accepted syntax should be using a `typedef` keyword:
typedef double (&array_ref)[3];
operator array_ref () { return v; }
More information about the Gcc-bugs
mailing list