У меня есть шаблон 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
.