summaryrefslogtreecommitdiffstats
path: root/src/corelib/json/qjsondocument.cpp
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@kdab.com>2016-10-17 13:00:04 +0200
committerMarc Mutz <marc.mutz@kdab.com>2016-10-18 16:06:28 +0000
commite80faf3db61ca9c701cd86876e3bce8e33226576 (patch)
tree279ad81c075f711ea776f5cff37db88c9571d129 /src/corelib/json/qjsondocument.cpp
parent3a1245fdace1b008018dfb6b6334d5ebaec81b5e (diff)
QTimer: don't circumvent <chrono> safety net
By templating on the <chrono> types and unconditionally using duration_cast to coerce the duration into a milliseconds, we violate a principal design rule of <chrono>, namely that non- narrowing conversions are implicit, but narrowing conversions need duration_cast. By accepting any duration, we allow non- sensical code such as QTimer::singleShot(10us, ...) to compile, which is misleading, since it's actually a zero- timeout timer. Overloading a non-template with a template also has adverse effects: it breaks qOverload(). Fix by replacing the function templates with functions that just take std::chrono::milliseconds. This way, benign code such as QTimer::singleShot(10s, ...) QTimer::singleShot(10min, ...) QTimer::singleShot(1h, ...) work as expected, but attempts to use sub-millisecond resolution fails to compile / needs an explicit user- provided duration_cast. To allow future extension to more precise timers, forcibly inline the functions, so they don't partake in the ABI of the class and we can later support sub-millisecond resolution by simply taking micro- or nano- instead of milliseconds. Change-Id: I12c9a98bdabefcd8ec18a9eb09f87ad908d889de Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/json/qjsondocument.cpp')
0 files changed, 0 insertions, 0 deletions