Created on 2009-03-01.00:00:00 last changed 199 months ago
The example at the end of _N2914_.14.11.2 [temp.archetype] paragraph 13 reads,
auto concept CopyConstructible<typename T> {
T::T(const T&);
}
template<CopyConstructible T> struct vector;
auto concept VectorLike<typename X> {
typename value_type = typename X::value_type;
X::X();
void X::push_back(const value_type&);
value_type& X::front();
}
template<CopyConstructible T>
requires VectorLike<vector<T>> // vector<T> is an archetype (but not an instantiated archetype)
void f(const T& value) {
vector<T> x; // OK: default constructor in VectorLike<vector<T> >
x.push_back(value); // OK: push_back in VectorLike<vector<T> >
VectorLike<vector<T>>::value_type& val = x.front(); // OK: front in VectorLike<vector<T> >
}
However, x.push_back(value) is, in fact, ill-formed: there is no relationship between VectorLike<vector<T>>::value_type and T in this example. The function needs one further requirement, e.g., std::SameType<VectorLike<vector<T>>::value_type, T> to allow use of the function parameter value as the argument of the push_back call.
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2009-08-03 00:00:00 | admin | set | status: drafting -> concepts |
| 2009-03-01 00:00:00 | admin | create | |