diff options
author | Patrick Palka <ppalka@redhat.com> | 2020-07-29 22:06:33 -0400 |
---|---|---|
committer | Patrick Palka <ppalka@redhat.com> | 2020-07-29 22:06:33 -0400 |
commit | dc3d1e181445fafbbd146eb355a750c41c338794 (patch) | |
tree | ee9484d0ba615f7e8127a51efd6025ace0f0dade /gcc/cp/constraint.cc | |
parent | bea7a39103a5a86d5daabfff746316dfd4e42b3d (diff) | |
download | gcc-dc3d1e181445fafbbd146eb355a750c41c338794.zip gcc-dc3d1e181445fafbbd146eb355a750c41c338794.tar.gz gcc-dc3d1e181445fafbbd146eb355a750c41c338794.tar.bz2 |
c++: constraints and explicit instantiation [PR96164]
When considering to instantiate a member of a class template as part of
an explicit instantiation of the class template, we need to first check
the member's constraints before proceeding with the instantiation of the
member.
gcc/cp/ChangeLog:
PR c++/96164
* constraint.cc (constraints_satisfied_p): Return true if
!flags_concepts.
* pt.c (do_type_instantiation): Update a paragraph taken from
[temp.explicit] to reflect the latest specification. Don't
instantiate a member with unsatisfied constraints.
gcc/testsuite/ChangeLog:
PR c++/96164
* g++.dg/cpp2a/concepts-explicit-inst5.C: New test.
Diffstat (limited to 'gcc/cp/constraint.cc')
-rw-r--r-- | gcc/cp/constraint.cc | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/cp/constraint.cc b/gcc/cp/constraint.cc index d0da230..e4aace5 100644 --- a/gcc/cp/constraint.cc +++ b/gcc/cp/constraint.cc @@ -2864,6 +2864,9 @@ constraint_satisfaction_value (tree t, tree args, tsubst_flags_t complain) bool constraints_satisfied_p (tree t) { + if (!flag_concepts) + return true; + return constraint_satisfaction_value (t, tf_none) == boolean_true_node; } @@ -2873,6 +2876,9 @@ constraints_satisfied_p (tree t) bool constraints_satisfied_p (tree t, tree args) { + if (!flag_concepts) + return true; + return constraint_satisfaction_value (t, args, tf_none) == boolean_true_node; } |