Как я могу отклонить вызов, если во время компиляции известно граничное условие?

У меня такая ситуация: есть огромный набор шаблонов, таких как std :: vector , которые будут вызывать ] memmove () для перемещения частей массива. Иногда они захотят «переместить» части нулевой длины - например, если хвост массива удален (например, std :: vector :: erase () ), они захотят переместить остаток массива , который будет иметь нулевую длину, и этот ноль будет известен во время компиляции (я видел разборку - компилятор знает), но компилятор все равно выдаст memmove () вызов.

По сути, у меня может быть оболочка:

inline void callMemmove( void* dest, const void* source, size_t count )
{
   if( count > 0 ) {
       memmove( dest, source, count );
   }
}

, но это приведет к дополнительной проверке во время выполнения в случаях, когда count неизвестен во время компиляции, что мне не нужно.

Можно ли каким-то образом использовать __ accept hint , чтобы указать компилятору, что, если он точно знает, что count равен нулю, он должен исключить memmove () ?

8
задан Suma 5 October 2011 в 21:19
поделиться