ในตัวอย่างต่อไปนี้อาร์กิวเมนต์ของฟังก์ชันถูกใช้เพื่อทดสอบด้วยนิพจน์ที่ต้องการว่านิพจน์ที่ใช้พวกเขานั้นมีรูปแบบที่ดีหรือไม่ การแสดงออกต้องไม่มีการโต้แย้ง; มันใช้ตัวแปรในขอบเขตฟังก์ชั่นโดยตรง:
#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);
}
โค้ดข้างต้นคอมไพล์ด้วยสาขาแนวคิดของ Clang อย่างไรก็ตาม GCC10 Resize
ยอมรับเฉพาะการเรียกร้องให้ GCC9 ICEs เสียงดังกราวถูกต้องไหมเมื่อยอมรับมัน?
Resize
และEziser
ควรจะปฏิเสธ) หรือฟังก์ชั่นทั้งสองควรรวบรวม ฉันจะบอกว่าเสียงดังกราวถูกต้อง