Используя typename с reinterpret_cast()
Как создать имя типа, которое является результатом reinterpret_cast?
Например,
template<typename T1> class node{
public:
using null_sp2node = typename reinterpret_cast<shared_ptr<node<T1>>>(NULL);
};
Выше генерируется следующая ошибка компилятора:
ошибка: ожидается полное имя после 'typename'
1 ответ
Решение
reinterpret_cast
возвращает значение, а не тип. В частности, это выражение. Если вы хотите получить тип выражения, правильный инструмент decltype
:
using null_sp2node = decltype(reinterpret_cast<shared_ptr<node<T1>>>(NULL));
Тем не менее, потому что результат reinterpret_cast<T>
это выражение типа T
нет никакого смысла в этом по сравнению с просто:
using null_sp2node = shared_ptr<node<T1>>;
Конечно, так как reinterpret_cast<shared_ptr<node<T1>>>(NULL)
для начала, он действительно не имеет значения. Ты не можешь reinterpret_cast
константа нулевого указателя на тип без указателя (за исключением определенных целочисленных типов).