Consider the example of the problem report 1 template <typename> 2 constexpr bool the_truth () { return true; } 3 4 template <bool> 5 struct Takes_bool { }; 6 7 template<bool B> 8 using Alias = Takes_bool<B>; 9 10 template<typename T> 11 struct test { using type = Alias<the_truth<T>()>; }; 12 13 int main () { 14 test<int> a; 15 16 return 0; 17 } that yields the error: test.cc: In substitution of ‘template<bool B> using Alias = Takes_bool<B> [with bool B = the_truth<int>()]’: test.cc:11:51: required from ‘struct test<int>’ test.cc:14:13: required from here test.cc:11:51: error: integral expression ‘the_truth<int>()’ is not constant struct test { using type = Alias<the_truth<T>()>; }; I think the issue happens in the course of instantiating test<int> at line 14, when we look into instantiating Alias<the_truth<T>()> (at line 11) (using instantiate_alias_template) with T = int. There, when we check the argument 'the_truth<int>()' to see if it actually is a constant expression, in check_instantiated_arg, we fail to recognize it constexpr-ness b/c we just look at its TREE_CONSTANT. At that point, the_truth<int> should have been folded, and it's not, because instantiate_alias_template forgets to call coerce_template_parms on its arguments. Fixed thus, bootstapped and tested on x86_64-unknown-linux-gnu against trunk. gcc/cp/ PR c++/55663 * pt.c (coerce_innermost_template_parms): New static function. (instantiate_alias_template): Use it here. gcc/testsuite/ PR c++/55663 * g++.dg/cpp0x/alias-decl-31.C: New test. From-SVN: r195189
Name |
Last commit
|
Last update |
---|---|---|
.. | ||
abi | Loading commit data... | |
asan | Loading commit data... | |
bprob | Loading commit data... | |
charset | Loading commit data... | |
compat | Loading commit data... | |
conversion | Loading commit data... | |
cpp | Loading commit data... | |
cpp0x | Loading commit data... | |
cpp1y | Loading commit data... | |
debug | Loading commit data... | |
dfp | Loading commit data... | |
diagnostic | Loading commit data... | |
eh | Loading commit data... | |
expr | Loading commit data... | |
ext | Loading commit data... | |
gcov | Loading commit data... | |
gomp | Loading commit data... | |
graphite | Loading commit data... | |
guality | Loading commit data... | |
inherit | Loading commit data... | |
init | Loading commit data... | |
ipa | Loading commit data... | |
lookup | Loading commit data... | |
lto | Loading commit data... | |
opt | Loading commit data... | |
other | Loading commit data... | |
overload | Loading commit data... | |
parse | Loading commit data... | |
pch | Loading commit data... | |
plugin | Loading commit data... | |
rtti | Loading commit data... | |
simulate-thread | Loading commit data... | |
special | Loading commit data... | |
tc1 | Loading commit data... | |
template | Loading commit data... | |
tls | Loading commit data... | |
tm | Loading commit data... | |
torture | Loading commit data... | |
tree-prof | Loading commit data... | |
tree-ssa | Loading commit data... | |
vect | Loading commit data... | |
warn | Loading commit data... | |
20090107-1.C | Loading commit data... | |
20090121-1.C | Loading commit data... | |
README | Loading commit data... | |
cdce3.C | Loading commit data... | |
constexpr-null1.C | Loading commit data... | |
dg.exp | Loading commit data... | |
func-args-1.C | Loading commit data... | |
mv1.C | Loading commit data... | |
mv2.C | Loading commit data... | |
mv3.C | Loading commit data... | |
mv4.C | Loading commit data... | |
mv5.C | Loading commit data... | |
mv6.C | Loading commit data... | |
pr37742.C | Loading commit data... | |
pr44328.C | Loading commit data... | |
pr44486.C | Loading commit data... | |
pr45038.C | Loading commit data... | |
pr45049-1.C | Loading commit data... | |
pr45049-2.C | Loading commit data... | |
pr45056.C | Loading commit data... | |
pr45112.C | Loading commit data... | |
pr45310.C | Loading commit data... | |
pr45330.C | Loading commit data... | |
pr45788.C | Loading commit data... | |
pr46065.C | Loading commit data... | |
pr46852.C | Loading commit data... | |
pr46868.C | Loading commit data... | |
pr46890.C | Loading commit data... | |
pr47053.C | Loading commit data... | |
pr47589.C | Loading commit data... | |
pr48484.C | Loading commit data... | |
pr48633.C | Loading commit data... | |
pr48660.C | Loading commit data... | |
pr48772.C | Loading commit data... | |
pr50672.C | Loading commit data... | |
pr50763-3.C | Loading commit data... | |
pr50763-4.C | Loading commit data... | |
pr51264-4.C | Loading commit data... | |
pr53055.C | Loading commit data... | |
pr54655.C | Loading commit data... | |
pr55106.C | Loading commit data... | |
pr55263.C | Loading commit data... | |
pr55513.C | Loading commit data... | |
pr55604.C | Loading commit data... | |
predict-loop-exit-1.C | Loading commit data... | |
predict-loop-exit-2.C | Loading commit data... | |
predict-loop-exit-3.C | Loading commit data... | |
prof-robust-1.C | Loading commit data... | |
pubtypes.C | Loading commit data... | |
system-binary-constants-1.C | Loading commit data... | |
system-binary-constants-1.h | Loading commit data... | |
uninit-pred-1_a.C | Loading commit data... | |
uninit-pred-1_b.C | Loading commit data... | |
uninit-pred-2_a.C | Loading commit data... | |
uninit-pred-2_b.C | Loading commit data... | |
uninit-pred-3_a.C | Loading commit data... | |
uninit-pred-3_b.C | Loading commit data... | |
uninit-pred-loop-1_a.cc | Loading commit data... | |
uninit-pred-loop-1_b.cc | Loading commit data... | |
uninit-pred-loop-1_c.cc | Loading commit data... | |
uninit-pred-loop_1.cc | Loading commit data... |