.net is not solid.....
try to compile something as simple as this. Its valid c++ according to the standard. gcc should compile it with no trouble.
Code:
template < class A >
class a {};
template < class A >
class a<A*> {}; // partial specialisation for pointer types
template < class A >
class a<const A*> {}; // ditto pointer to const
template <>
class a<char> {};
template< class T >
void f(T)
{}
template< class T >
void f(T *)
{}
template<>
void f(char)
{}
int main()
{
a<int> a1;
a<char> a2;
a<char*> a3;
a<const char*> a4;
f(1);
f('1');
f("1");
return 0;
}