В книге Бьярне Страуструпа "Программирование. Принципы и практика с использованием C++, 2-е издание.", глава 19, пункт 19.3.3 написано, что в С++14 мы можем использовать и применять к аргументам шаблона некую концепцию или требования шаблона.
template<typename T> // Для всех типов T
requires Element<T>() // таких, что является Element
class vector {
// . . .
};
Вот пара концепций, которые предоставлены в книге (там их много):
Element<E> (): Е может быть элементом контейнера
Number<N> () : N ведет себя как число, поддерживая операции +, -, * и /.
Но этот код не компилируется. Пожалуйста, объясните есть ли ключевое слово requires и вообще концепции шаблонов в С++?
Концепций нет в С++14, и их не будет в С++17.
В настоящее время концепции реализованы только в GCC 6.1+, и включаются ключом командной строки -fconcepts:
> type main.cpp
#include <iostream>
template<typename T>
requires sizeof(T) < 4
void f() {
std::cout << "< 4\n";
}
template<typename T>
requires sizeof(T) >= 4
void f() {
std::cout << ">= 4\n";
}
int main() {
f<short>();
f<double>();
}
> g++ -fconcepts -std=c++14 -Wall -pedantic main.cpp && a
< 4
>= 4
Краткое описание синтаксиса можно прочитать на cppreference.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей