Привет всем. Концепции теперь являются частью стандарта C ++ 20, и, чтобы поиграть с ним, я в основном написал этот пример, который когда-то видел
#include<iostream>
template<typename T>
concept Container= requires (T a){
{ a.size() } -> size_t;
// others
}
template<Container Holder>
class Demo{};
int main(){
Demo<std::vector<int>> d;
}
Но при компиляции кода я получил следующую ошибку
ошибка: требование типа возврата не является ограничением типа ({a.size ()} -> size_t;)
Позже я вспомнил, что возвращение ограничение типа не может быть типом примитива и изменяет код с помощью std :: same_as
#include<iostream>
template<typename T>
concept Container= requires (T a){
{ a.size() } -> std::same_as<size_t>;
// others
}
template<Container Holder>
class Demo{};
int main(){
Demo<std::vector<int>> d;
}
, где std :: same_as сам по себе является концепцией.
Но почему нельзя использовать примитивные типы? Я знаю, что это что-то ломает в C ++, но я не могу запомнить это.