LINUX.ORG.RU

Как правильно написать static_cast<decltype(data)>(-1), где data объявлена: unsigned int& data?

 


0

2

Пусть будет код:

#define INC_VALUE(X) [](auto& v) { \
   assert( v < static_cast<decltype(v)>(-1) ); \
   ++v; \
}(X)

...
unsigned int data = X;
INC_VALUE(data);
этот код ругается, что невозможно преобразовать int к unsigned int&. Как правильно записать выражение преобразования типа с убиранием амперсанда? (интересует именно преобразование типа, а не другие варианты реализации этой функции).

Нафейхоа тебе макросы? C++ дает тебе шаблоны, inline и constexpr. Пользуйся!

А касательно твоего случая — std::decay (ну или std::remove_reference).

KennyMinigun ★★★★★
()
Ответ на: комментарий от KennyMinigun

Нафейхоа тебе макросы? C++ дает тебе шаблоны, inline и constexpr. Пользуйся!
А касательно твоего случая — std::decay (ну или std::remove_reference).

Спасибо, суть понял. Макрос нужен потому что в шаблонах не определить строку откуда происходил вызов и в случае assert будет ссылка на шаблон, а не на вызвавшую функцию. А у меня много вызовов таких мелких функций и сложно отлавливать откуда произошла ошибка.

victor79
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.