Gabriel Dos Reis <g...@integrable-solutions.net> 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