T *t; //T is an implementation detail
t = new T; //want to avoid naming T to allow for flexibility
t = new decltype(*t); //error: cannot use 'new' to allocate a reference
t = new std::remove_reference<decltype(*t)>::type(); //clunky
Это отвечает, почему decltype(*t)
возвращает T &
, а не T
.
Я могу поместить свою последнюю строку в макрос, но это кажется субоптимальным. Есть ли лучшее решение, чем у меня до сих пор? Это относится к Обзор кода?