Это я понимаю. Просто вы написали { const size_t _size; const int* const _ptr; }, и поэтому я спросил, эквивалентно ли оно const { size_t _size; const int* _ptr; }.
Но Buf1d, как вы видите, вообще не владеет никакой памятью. И не важно, что этот буфер оборачивает, std::vector или const double*, взятый невесть откуда. Я просил ответ на конкретный вопрос: при каких условиях такой reinterpret_cast безопасен и что об этом говорит стандарт C++.
Архитектура x86 (32-битная). Конкретно процессор — AMD Phenom x4. Выравнивание стандартное — скажем, 4 байта. Считаем, что функция «вычислить» реентарабельна (по крайней мере, так должно быть в идеале — она ничего не пишет, только делает что-то из r/o входных данных). Двойная блокировка тут непригодна, надежда только на атомарность, и мой вопрос как раз в этом: а насколько атомарны операции «записать double» и «считать double»?
А с кодом чуть-чуть ошибся, но вроде нефатально:
double &x = кэш[i];
if (isnan(x)) x=вычислить(i);
return x;
Итак, автоповтором занимается КЛАВИАТУРА (по крайней мере AT- или PS/2-, про USB- не скажу). Так что реалистично — никак. Разве что вычитать задержки клавиатуры из системы и повторить их самостоятельно.