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;
^