re PR c++/67152 ([concepts] bogus "partial specialization of ‘foo<T>’ after instantiation" error)
PR c++/67152 * pt.c (process_partial_specialization): Call associate_classtype_constraints. From-SVN: r226739
This commit is contained in:
parent
4e7739b25a
commit
7beb0c35aa
|
@ -1,5 +1,9 @@
|
|||
2015-08-08 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/67152
|
||||
* pt.c (process_partial_specialization): Call
|
||||
associate_classtype_constraints.
|
||||
|
||||
PR c++/67159
|
||||
* constraint.cc (finish_template_introduction):
|
||||
SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT.
|
||||
|
|
|
@ -4672,6 +4672,8 @@ process_partial_specialization (tree decl)
|
|||
/* We didn't register this in check_explicit_specialization so we could
|
||||
wait until the constraints were set. */
|
||||
decl = register_specialization (decl, maintmpl, specargs, false, 0);
|
||||
else
|
||||
associate_classtype_constraints (type);
|
||||
|
||||
DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
|
||||
= tree_cons (specargs, tmpl,
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
// PR c++/67152
|
||||
// { dg-options -std=c++1z }
|
||||
|
||||
template <class T>
|
||||
concept bool HasType = requires { typename T::type; };
|
||||
|
||||
template<class T>
|
||||
struct trait {
|
||||
using type = void;
|
||||
};
|
||||
|
||||
struct has_type { using type = void; };
|
||||
|
||||
// Instantiation here
|
||||
trait<has_type>::type foo() {}
|
||||
|
||||
// constrained version here. Type "has_type" would fail this
|
||||
// constraint so this partial specialization would not have been
|
||||
// selected.
|
||||
template<class T>
|
||||
requires !HasType<T>
|
||||
struct trait<T> {
|
||||
using type = void;
|
||||
};
|
Loading…
Reference in New Issue