Можно попробовать решить такую задачу на этапе компиляции. Шаблоны дают все возможности для этого и код остается переносимым.
template<int> void DoMyOperation();
template<> void DoMyOperation<4>()
{
// do 32-bits operations
}
template<> void DoMyOperation<8>()
{
// do 64-bits operations
}
int main()
{
// appropriate function will be selected at compile time
DoMyOperation<sizeof(size_t)>();
return 0;
}В примере выше использован тип size_t, но стандарт говорит только о том, что этот тип должен уметь хранить максимальный размер блока памяти в текущей реализации системы аллоцирования. Строго говоря, это только косвенно говорит о том скольки битная платформа используется, но сложно представить себе реализацию С++, где это будет неприменимо.