У наступному прикладі аргументи функції використовуються для тестування з необхідним вираженням, чи добре сформований вираз з їх допомогою. Вираз, що вимагає, не має аргументів; він безпосередньо використовує змінні в області функцій:
#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);
}
Наведений вище код поєднується з відділенням понять Кланг. Однак GCC10 приймає лише виклик Resize
. GCC9 ДВС. Чи правильно Кланг прийняв це?
Resize
і Eziser
повинні бути відхилені) або обидві функції повинні компілюватися. Я б сказав, що Кланг прав.