Я пытаюсь найти способ определить, является ли тип указателем во время компиляции. Это примерно так:
#include <type_traits>
#if std::is_pointer<char*>::value
#pragma message("blah")
#endif
Однако это выдает предупреждение C4067: неожиданные токены следуют за препроцессоромдиректива - ожидал новой строки "дважды (я думаю, что :: это то, что смущает это), и он не печатает бла. Когда я hoover over :: value, компилятор говорит мне, если это правда, что означает, что это известно во время компиляции, так чтодолжно работать.
Причина этого в том, что я хочу иметь возможность сделать что-то вроде этого:
T pHead;
#if std::is_pointer<T>::value
pHead= NULL;
#endif
, где я NULL переменная, если это указатель. Это должно бытьпроверка времени компиляции, потому что если T является структурой, я не могу присвоить NULL ее переменной. Т.е. следующий код не будет компилироваться, когда T является структурой:
T pHead;
if (std::is_pointer<T>::value)
pHead= NULL;
Спасибо
Matt