[Bug c++/81547] New: Surrogate call function results in call to other conversion operator
hstong at ca dot ibm.com
gcc-bugzilla@gcc.gnu.org
Tue Jul 25 03:32:00 GMT 2017
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81547
Bug ID: 81547
Summary: Surrogate call function results in call to other
conversion operator
Product: gcc
Version: 8.0
Status: UNCONFIRMED
Keywords: accepts-invalid, rejects-valid, wrong-code
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: hstong at ca dot ibm.com
Target Milestone: ---
In the C++17 DIS subclause 16.3.1.1.2 [over.call.object] paragraph 3,
it is stated that the conversion function corresponding to the selected
surrogate call function is used to determine the function which is to be called
by the call syntax.
It appears that GCC instead chooses the function selected for the user-defined
conversion sequence formed for overload resolution.
### SOURCE (<stdin>):
using ff = int (*)(int);
constexpr int ffimpl0(int x) { return x; }
constexpr int ffimpl1(int x) { return x + 1; }
struct A {
template <typename T> constexpr operator T() const { return ffimpl0; }
constexpr operator ff() const volatile { return ffimpl1; }
};
char x[A()(42.f)];
extern char x[43]; // Clang accepts; GCC rejects
### COMPILER INVOCATION:
g++ -fsyntax-only -std=c++11 -x c++ -
### ACTUAL OUTPUT:
<stdin>:11:17: error: conflicting declaration 'char x [43]'
<stdin>:10:6: note: previous declaration as 'char x [42]'
### EXPECTED OUTPUT:
(clean compile)
### COMPILER VERSION INFO (g++ -v):
Using built-in specs.
COLLECT_GCC=/opt/wandbox/gcc-head/bin/g++
COLLECT_LTO_WRAPPER=/opt/wandbox/gcc-head/libexec/gcc/x86_64-pc-linux-gnu/8.0.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ../source/configure --prefix=/opt/wandbox/gcc-head
--enable-languages=c,c++ --disable-multilib --without-ppl --without-cloog-ppl
--enable-checking=release --disable-nls --enable-lto
LDFLAGS=-Wl,-rpath,/opt/wandbox/gcc-head/lib,-rpath,/opt/wandbox/gcc-head/lib64,-rpath,/opt/wandbox/gcc-head/lib32
Thread model: posix
gcc version 8.0.0 20170724 (experimental) (GCC)
More information about the Gcc-bugs
mailing list