Используя 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 константа нулевого указателя на тип без указателя (за исключением определенных целочисленных типов).

Другие вопросы по тегам