Я хотел бы специализировать класс шаблона для нескольких указателей для разных объектов. Это работает, как ожидается, для обычных указателей:Специализация класса шаблона с аргументом шаблона указателя
struct Base{} b;
template<Base* B> struct Test{};
template<> struct Test<&b>{};
Но не для указателей на Derived
объектов:
struct Derived : Base{} d;
template<> struct Test<&d>{};
coliru компилятор (я думаю, что его gcc 5.2
) показывает следующее сообщение об ошибке:
main.cpp:14:26: error: could not convert template argument '& d' to 'Base*'
template<> struct Test<&d>{};
Я не знаю, почему это не разрешено и хотелось бы знать, есть ли какие-либо способы решения проблемы ...
Here является ссылкой на код в coliru.
Нет. Даже непринужденные правила для шаблонов, не связанных с типом аргументов в C++ 17, до сих пор не позволяют указателям на подобъекты. –