Всем привет
Существует ли тенденция избегать size_t из-за того, что он является
беззнаковым, например, чтобы не попасть на неожиданные signed/unsigned promotion'ы или остатки по модулю 2^N ?
Имея что-то вроде
template<typename T>
inline T static_cast_size_t(size_t value)
{
#ifdef DEBUG
if (value > std::numeric_limits<T>::max())
{
ASSERT(false);
}
return static_cast<T>(value);
#else
return static_cast<T>(value);
#endif
}
// ....
// ....
// ....
// Применять как-то так:
int exampleNum = static_cast_size_t<int/*Или int_fast32, главное, что знаковый*/>(vector.size());
// ...
int numThatCanBeNegative = static_cast_size_t<int/*Или int_fast32, главное, что знаковый*/>(sizeof(U)) - someValue;
// ...
К сожалению, не нашёл guideline'ов ни по поводу size_t, ни int*_t, ни int_fast*