Gabriel Dos Reis <[email protected]> writes:
> The example is valid, but I am not sure I understand your
> explanation...
Ah, sorry. I realize just now that I haven't mentioned the initial
erratic behaviour. Maybe that could have made my message easier to
understand.
So consider the test case of the message:
1 template<typename>
2 using A = int;
3
4 template<template<class> class>
5 struct B {};
6
7 B<A> b;
test.cc:7:4: error: integral expression ‘A’ is not constant
B<A> b;
^
Followed by some irrelevant other error messages.
As I was saying my earlier message, here, the TREE_TYPE of the
template_decl A is an integer; so check_instantiated_arg takes it as
if A is an integer value (a decl with integer type), and thus, should
be a constant.
The fix I am proposing is just to allow check_instantiated_arg to make
the difference between a classical integer decl, and an alias template
which type-id is an integer.
--
Dodji