[Bug c++/79682] New: [concepts] ambiguous overload with functionally equivalent predicate constraints compiles
hstong at ca dot ibm.com
gcc-bugzilla@gcc.gnu.org
Wed Feb 22 23:21:00 GMT 2017
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79682
Bug ID: 79682
Summary: [concepts] ambiguous overload with functionally
equivalent predicate constraints compiles
Product: gcc
Version: 7.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: hstong at ca dot ibm.com
Target Milestone: ---
Given the following source, the normalized constraints of the foo() returning
int contains predicate constraints:
N > 1
- and -
(N & 0x1) != 0
The normalized constraints of the foo() returning void contains:
(N & 0x1) != 0x0
The similar looking predicate constraints are not equivalent
([temp.over.link]).
The call in main() should therefore be ambiguous.
### Source (<stdin>):
template <unsigned N>
requires (N & 0x1) != 0 && (N > 1)
int foo() { return 0; }
template <unsigned N>
requires (N & 0x1) != 0x0
void foo() { }
int main(void) {
return foo<0x03>();
}
### Compiler invocation:
g++ -std=c++1z -fconcepts -c -o /dev/null -x c++ -
### Actual output:
(Clean compile)
### Expected output:
<stdin>: In function 'int main()':
<stdin>:10:20: error: call of overloaded 'foo<3>()' is ambiguous
<stdin>:3:5: note: candidate: int foo() [with unsigned int N = 3]
<stdin>:7:6: note: candidate: void foo() [with unsigned int N = 3]
### Compiler version (g++ -v):
Using built-in specs.
COLLECT_GCC=/usr/local/gcc-head/bin/g++
COLLECT_LTO_WRAPPER=/usr/local/gcc-head/libexec/gcc/x86_64-pc-linux-gnu/7.0.1/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: /home/heads/gcc/gcc-source/configure
--prefix=/usr/local/gcc-head --enable-languages=c,c++ --enable-lto
--disable-multilib --without-ppl --without-cloog-ppl --enable-checking=release
--disable-nls
Thread model: posix
gcc version 7.0.1 20170125 (experimental) (GCC)
More information about the Gcc-bugs
mailing list