https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81178
Eric Gallager changed:
What|Removed |Added
Status|UNCONFIRMED |NEW
Last reconfirmed||2017-08-21
CC||egallager at gcc dot gnu.org
Blocks||67491
Ever confirmed|0 |1
--- Comment #1 from Eric Gallager ---
(In reply to Casey Carter from comment #0)
> GCC 6.3/7.1/trunk as of 20170621 all diagnose this ill-formed program
> (https://wandbox.org/permlink/uatmNSnlLbhvSvls):
>
> template
> concept bool C1 = true;
>
> template
> using alias = typename T::type;
>
> template
> concept bool C2 = C1;
>
> void bar(C2) {}
>
> int main() { bar(42); }
>
> with:
>
> prog.cc: In function 'int main()':
> prog.cc:12:20: error: cannot call function 'void bar(auto:1) [with auto:1 =
> int]'
> int main() { bar(42); }
> ^
> prog.cc:10:6: note: constraints not satisfied
> void bar(C2) {}
> ^~~
> prog.cc:10:6: note: in the expansion of concept 'C2 template T> concept const bool C2 [with T = int]'
>
> (Yes, that is the entire diagnostic.)
Confirmed for this first testcase.
> If we expand the definition of C2 fully into bar
> (https://wandbox.org/permlink/GKW0vWSPIY5XrGRE):
>
> template
> requires C1
> void bar(T) {}
>
> the compiler gives a more complete diagnostic:
>
> prog.cc: In function 'int main()':
> prog.cc:14:20: error: cannot call function 'void bar(T) [with T = int]'
> int main() { bar(42); }
> ^
> prog.cc:12:6: note: constraints not satisfied
> void bar(T) {}
> ^~~
> prog.cc:12:6: note: invalid use of the concept 'C1'
> prog.cc:14:20: error: 'int' is not a class, struct, or union type
> int main() { bar(42); }
> ^
...and actually confirmed for this second part, too. (At first I thought it was
a separate standalone testcase, and when compiling it like that it gave me a
different error, but then I noticed it was actually a modification to the first
one, so after modifying the first one accordingly, I got the same result as you
did.)
Referenced Bugs:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67491
[Bug 67491] [meta-bug] concepts issues