Требование, чтобы T
происходило от iDataType<T>
в ограниченном контексте вопроса, похоже, не добавляет ценности. Но, чтобы ответить на вопрос в том виде, как я его интерпретирую, свойство, которое вы хотите быть истинным, таково:
std::is_convertible_v<T*, iDataType<T>*>
std::is_base_of
вводит в заблуждение, поскольку оно ответит, имеет ли T
основание iDataType<T>
, но язык требует однозначной базы c для использования T&
в качестве iDataType<T>&
. Итак, в C ++, когда вы хотите узнать, имеет ли что-то базовый класс в качестве интерфейса, std::is_base_of
неверен.