diff --git a/src/test/optional_benchmark.cpp b/src/test/optional_benchmark.cpp index 99bf2a0c0..89fb41e1a 100644 --- a/src/test/optional_benchmark.cpp +++ b/src/test/optional_benchmark.cpp @@ -46,10 +46,22 @@ double measure_time_ms(Func f, int iterations = 1000000) { } // Prevent compiler optimization +// Prevent compiler optimization (portable for GCC/Clang and MSVC) +#if defined(_MSC_VER) +#include template -void do_not_optimize(T const& value) { +inline void do_not_optimize(T const& value) { + // Trick MSVC into thinking value is used + volatile const T* volatile ptr = &value; + (void)ptr; + _ReadWriteBarrier(); +} +#else +template +inline void do_not_optimize(T const& value) { asm volatile("" : : "m"(value) : "memory"); } +#endif void benchmark_construction() { const int iterations = 1000000;