C++ のrequiresキーワードに沿って実行したところ、これまでの理解が正しいかどうかを知りたいと思います。require と enable_if の両方が、テンプレートのコンパイル時間の制約を提供します。必要な場合は、制約がまったく含まれます。
requiresが関数パラメーターを制約する方法を提供する場合、enable_ifは、コンパイル時の変換をテンプレート型自体の特定の条件に制限することを主な目的としています。
例:
#include <type_traits>
template<typename T>
concept T AdditiveGroup
{
return requires(const T pA, const T pB)
{
{ pA + pB }->T;
};
};
template<typename T>
typename std::enable_if<std::is_integral<T>::value, bool>::type
addElements(const T pA, const T pB)
{
return (pA + pB);
}
この概念は、pA と pB を追加できる場合にのみ機能するはずですが、enable_if 条件は評価を整数型に制限します。
これが正しいかどうか教えてくれてありがとう!
PS: require制約の構文については、まだよくわかりません。さらに、現時点ではどのコンパイラがそれらを受け入れるかわからないので、ヒントをありがとう!