다음 예제에서 함수 인수는 필수 표현식을 사용하여 표현식이 제대로 구성되어 있는지 테스트하는 데 사용됩니다. require 표현식은 인수를 취하지 않습니다. 함수 범위의 변수를 직접 사용합니다.
#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 concepts 분기로 컴파일됩니다. 그러나 GCC10은에 대한 호출 만 수락합니다 Resize
. GCC9 얼음. Clang이 그것을 받아 들일 수 있습니까?
2
ICE는 항상 컴파일러 문제입니다.
—
Jarod42
나는이 지역 변수를 캡처에 허가되어 있지 않은 경우는 코드를 거부해야 하나 말할 것입니다 (모두 그렇게
—
Jarod42
Resize
하고 Eziser
해야 거부) 또는 두 기능은 컴파일해야한다. 나는 clang이 옳다고 말할 것이다.
@ Jarod42 네. GCC 행동은 분명히 버그가 있습니다. PR을 제출하겠습니다. 또한 Clang이 옳다고 생각하지만 확인하고 싶습니다.
—
metalfox