[Bug c++/81178] [concepts] poor (partial?) diagnostic for alias substitution failure in a concept body

2019-12-04 Thread redi at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81178

--- Comment #3 from Jonathan Wakely  ---
Huh, trunk now accepts the program.

[Bug c++/81178] [concepts] poor (partial?) diagnostic for alias substitution failure in a concept body

2018-10-01 Thread egallager at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81178

Eric Gallager  changed:

   What|Removed |Added

 CC||paolo.carlini at oracle dot com

--- Comment #2 from Eric Gallager  ---
cc-ing closest thing we have to a "concepts" maintainer

[Bug c++/81178] [concepts] poor (partial?) diagnostic for alias substitution failure in a concept body

2017-08-21 Thread egallager at gcc dot gnu.org
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