我正在尝试使用 Clang 编译 MSVC 标准库。但它失败了,因为标准库在类范围内使用显式模板函数特化。
这是一个 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;
^