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ı?
Resize
ve Eziser
olmalıdır reddetmek) ya da her iki işlev derlemek gerekir. Clang'ın doğru olduğunu söyleyebilirim.