Aşağıdaki örnekte, işlev bağımsız değişkenleri, bunları kullanan bir ifadenin iyi biçimlendirilip biçimlendirilmediğini bir zorunlu ifadeyle test etmek için kullanılır. Zorunlu ifade hiçbir argüman almaz; doğrudan işlev kapsamındaki değişkenleri kullanır:
#include <cstddef>
#include <vector>
template<typename T>
void Resize(T &v, std::size_t const n)
{
if constexpr (requires { v.resize(n); })
v.resize(n);
}
template<typename T>
void Eziser(T &v, std::size_t const n)
{
if constexpr (requires { v.eziser(n); })
v.eziser(n);
}
int main()
{
std::vector<int> v;
Resize(v, 10u);
Eziser(v, 10u);
}
Yukarıdaki kod Clang kavramları dalı ile derlenir. Ancak, GCC10 sadece çağrıyı kabul eder Resize. GCC9 ICE'ler. Clang kabul etmekte haklı mı?
Resizeve Eziserolmalıdır reddetmek) ya da her iki işlev derlemek gerekir. Clang'ın doğru olduğunu söyleyebilirim.