Created on 2009-04-01.00:00:00 last changed 186 months ago
The relationship of requirements with template aliases is not clear in the current wording. For example, something like
auto concept C{}; template <class T> struct A{}; template <C T> using B = A<T>;
is presumably allowed by the current wording of 13.7.8 [temp.alias] but, unless a good use case is presented, should probably be prohibited.
On the other hand, _N2914_.14.11 [temp.constrained] paragraph 5,
Within a constrained context, a program shall not require a template specialization of an unconstrained template for which the template arguments of the specialization depend on a template parameter.
might be considered to forbid an example like
template <C T> struct X {}; template <class T> using Y = X<T>; template <std::VariableType T> void f(Y<T>); // Error?
although it should probably be allowed. (Note, however, that 13.7.8 [temp.alias] paragraph 2,
When a template-id refers to the specialization of a template alias, it is equivalent to the associated type obtained by substitution of its template-arguments for the template-parameters in the type-id of the template alias.
could be viewed as allowing this example, depending on how the word “equivalent” is understood.)
The text should be amended to clarify the resolution of these questions. (See also issue 848.)
History | |||
---|---|---|---|
Date | User | Action | Args |
2009-08-03 00:00:00 | admin | set | status: open -> concepts |
2009-04-01 00:00:00 | admin | create |