Наткнулся на интересную
статью.
Довольно приятный синтаксис получается, заодно и шаблоны "очеловечили"
//-- шаблонная функция с концептами
template<typename R, typename T>
requires Range<R>()
&& Equality_comparable<T, Value_type<R>>()
bool in(R const& range, T const& value);
// вариант 2
template<Range R,
Equality_comparable<Value_type<R>> T>
bool in(R const& range, T const& value);
// вариант 3
void sort(Sortable_container& c);
//-- пласехолдеры (вместо auto)
for (Pointer iter = c.begin(); iter != c.end(); ++iter)
// Do stuff
Кстати пишут, что компилятор не проверяет соответствие операций внутри функции с концептом. Т.е.
void sort(Sortable_container& c) {
cout << c; // компилируется, хотя Sortable_container не требует операции вывода в поток
}
Ждем GCC 6