I have a templated class
(call it Foo
) which has several specializations. I would like the compilation to fail if someone tries to use an unspecialized version of Foo
.
Here is what I actually have:
template <typename Type>
class Foo
{
Foo() { cannot_instantiate_an_unspecialized_Foo(); }
// This method is NEVER defined to prevent linking.
// Its name was chosen to provide a clear explanation why the compilation failed.
void cannot_instantiate_an_unspecialized_Foo();
};
template <>
class Foo<int>
{ };
template <>
class Foo<double>
{ };
So that:
int main()
{
Foo<int> foo;
}
Works while:
int main()
{
Foo<char> foo;
}
Does not.
Obviously, the compiler chain only complains when the linking process takes place. But is there a way to make it complain before ?
I can use boost
.