以下のコードでUIntCのところの整数かどうかを判定するところを
std::is_integral_vにするか、それを用いたコンセプトのIntCを使うかで
コンパイルが通る、通らないと違いが出ますが、
このあたりの解決はどのような仕組みになっているのでしょうか?
C++
1template<typename T> 2concept IntC = std::is_integral_v<T>; 3 4//こっちはコンパイルが通る 5template<typename T> 6concept UIntC = IntC<T> && std::is_unsigned_v<T>; 7//こっちはコンパイルが通らない 8template<typename T> 9concept UIntC = std::is_integral_v<T> && std::is_unsigned_v<T>; 10 11template<typename T> 12void f() { std::cout << "AnyType" << std::endl; } 13template<IntC T> 14void f() { std::cout << "Int" << std::endl; } 15template<UIntC T> 16void f() { std::cout << "UInt" << std::endl; } 17 18int main() 19{ 20 f<int>(); 21 f<unsigned int>(); 22 f<float>(); 23}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。