diff options
author | Jason Merrill <jason@redhat.com> | 2016-04-14 16:14:44 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2016-04-14 16:14:44 -0400 |
commit | d25a101fe78834db307bb868056b0ff5152e0eb3 (patch) | |
tree | 5baedbd6418641eca51974a1a0df94885b6e9a54 | |
parent | 3ae9a8b765a5bbcdae187b79eb1f773582b342e1 (diff) | |
download | gcc-d25a101fe78834db307bb868056b0ff5152e0eb3.zip gcc-d25a101fe78834db307bb868056b0ff5152e0eb3.tar.gz gcc-d25a101fe78834db307bb868056b0ff5152e0eb3.tar.bz2 |
re PR c++/70543 (wrong non-const error for enable_if and constexpr function)
PR c++/70543
* pt.c (value_dependent_expression_p) [VAR_DECL]: A type-dependent
initializer also makes the variable value-dependent.
From-SVN: r234990
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/pt.c | 1 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/constexpr-template9.C | 17 |
3 files changed, 22 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index cba07aa..01f13b7 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2016-04-14 Jason Merrill <jason@redhat.com> + PR c++/70543 + * pt.c (value_dependent_expression_p) [VAR_DECL]: A type-dependent + initializer also makes the variable value-dependent. + PR c++/70648 * constexpr.c (cxx_eval_store_expression): Also copy CONSTRUCTOR_NO_IMPLICIT_ZERO. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index d066e55..4a00530 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -22670,6 +22670,7 @@ value_dependent_expression_p (tree expression) && (TREE_CODE (DECL_INITIAL (expression)) == TREE_LIST /* cp_finish_decl doesn't fold reference initializers. */ || TREE_CODE (TREE_TYPE (expression)) == REFERENCE_TYPE + || type_dependent_expression_p (DECL_INITIAL (expression)) || value_dependent_expression_p (DECL_INITIAL (expression)))) return true; return false; diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-template9.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-template9.C new file mode 100644 index 0000000..2ca641d --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-template9.C @@ -0,0 +1,17 @@ +// PR c++/70543 +// { dg-do compile { target c++11 } } + +template <typename> +struct X +{ + template <unsigned int = 0> + static constexpr int + calc (void) + { + return 0; + } + + static constexpr unsigned int value = calc (); + + char foo[value]; +}; |