У меня есть шаблонный class
(назовите его Foo
), который имеет несколько специализаций. Я хочу, чтобы компиляция завершилась неудачей, если кто-то попытается использовать неспециализированную версию Foo
.
Вот что я на самом деле:
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>
{ };
Итак, чтобы:
int main()
{
Foo<int> foo;
}
Работает в то время как:
int main()
{
Foo<char> foo;
}
Нет.
Очевидно, что цепочка компилятора только жалуется, когда происходит процесс связывания. Но есть ли способ заставить его жаловаться раньше?
Я могу использовать boost
.