Clang을 사용하여 MSVC 표준 라이브러리를 컴파일하려고합니다. 그러나 표준 라이브러리가 클래스 범위에서 명시 적 템플릿 함수 전문화를 사용하기 때문에 실패합니다.clang을 사용하여 MSVC std lib을 컴파일합니다. 클래스 범위에서 명시 적 템플릿 함수 전문화
이것은 MS 확장이며 Clang에서 사용할 수없는 것 같습니다.
다음은 MSVS로는 정상적으로 컴파일되지만 Clang에서는 제대로 컴파일되지 않는 간단한 예입니다.
template<class T>
class A
{
public:
A()
{
foo((T)0, 0);
}
template<class T2>
void foo(T2, void* p) {}
template<>
void foo<bool>(bool, void* p)
{
t = (T)p;
}
T t;
};
int main()
{
A<bool> a;
return 0;
}
Clang을 사용할 때이 기능을 사용하려면 어떻게해야합니까? 그러면 MSVC 표준 라이브러리를 컴파일 할 수 있습니까?
warning: explicit specialization of 'foo' within class scope is a Microsoft extension [-Wmicrosoft]
void foo<bool>(bool, void* p)
error: expected ';' after expression
t = (T)p;
^
;
error: no member named 'T' in 'A<bool>'
t = (T)p;
^
궁금한데, 왜 Clang과 MSVC의 라이브러리를 컴파일하고 있습니까? – Pubby
그것은 Clang이 MS 확장이라고 알고있는 것처럼 보입니다. 경고는 단지 그것에 대해서 경고하기 때문에, 올바르게 이해하지 못하기 때문입니다. 'A'이 단지 버그 일 뿐이라고 가정합니다. –
@Pubby, 컴파일하지 않는 MSVC 항목은 프로젝트에 포함 된 헤더 파일에 구현됩니다. 나는 Clang과 함께 컴파일하기 때문에 MSVC가보고하지 않는 많은 유용한 오류와 경고를 제공합니다. – user2080366