what is template value type?
value_type of the template is the type of template type
for example if you have std::vector<int> the value type is int like the example below …
template<typename T>
typename std::decay<typename T::value_type>::type fun2(T t){
return *t.begin();
}
what is the “requires” keyword?
in before c++ 20 if you want to restrict type
template<class T>
class A{
public:
using value_type=T;
};
template<class T>
class B:public A<T>{};
template<typename T,typename =std::enable_if_t<std::is_base_of_v<A<typename T::value_type>,T>>,
typename =std::enable_if<is_arithmetic_v<typename T::value_type>>>
class tempClass{};
//tempClass<B<int>> correct
//tempClass<B<string>> is not correct string is not arithmetic type
but in c++20
template<typename T>
requires std::is_base_of_v<A<typename T::value_type>,T> && is_arithmetic_v<typename T::value_type>
class tempClass{};
what is the “concept” keyword?
template<class T>
concept MM=std::is_base_of_v<A<typename T::value_type>,T> && is_arithmetic_v<typename T::value_type>;
template<MM T>
class tempClass{};
//or
template<class T> requires MM<T>
class tempClass{};