Я не могу придумать ни одного возможного решения во время компиляции, используя C ++.
Я могу подумать о возможном решении во время запуска (инициализация библиотеки), но оно будет ограничено.
class A: public Base<A,1> {};
У нас Base
регистрируется соответствие между идентификатором 1
и классом typeid(A)
во время инициализации библиотеки. Если идентификатор существует, а классы не согласны, остановите запуск.
Однако есть одна оговорка:
class A: public Base<A,1> {};
class C: public A {};
class D: public A {};
Ничто не мешает классам, производным от A
, конфликтовать.
Я могу предложить статический анализ: подобрать синтаксический анализатор C ++ и запрограммировать обработчик предварительной фиксации, который проверит измененные файлы и посмотрит, нет ли в них конфликта.