From ce5b1981ea19eed5077649d55d4f28584aec3c68 Mon Sep 17 00:00:00 2001 From: paulfd Date: Fri, 20 Sep 2019 22:58:26 +0200 Subject: [PATCH] Use SFINAE to replace if constexpr --- sfizz/Opcode.h | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/sfizz/Opcode.h b/sfizz/Opcode.h index f392e45d..79694ca5 100644 --- a/sfizz/Opcode.h +++ b/sfizz/Opcode.h @@ -29,6 +29,7 @@ #include "StringViewHelpers.h" #include #include +#include // charconv support is still sketchy with clang/gcc so we use abseil's numbers #include "absl/strings/numbers.h" @@ -44,10 +45,9 @@ struct Opcode { LEAK_DETECTOR(Opcode); }; -template +template ::value, int> = 0> inline absl::optional readOpcode(absl::string_view value, const Range& validRange) { - if constexpr (std::is_integral::value) { int64_t returnedValue; if (!absl::SimpleAtoi(value, &returnedValue)) { float floatValue; @@ -62,13 +62,16 @@ inline absl::optional readOpcode(absl::string_view value, const Range returnedValue = std::numeric_limits::min(); return validRange.clamp(static_cast(returnedValue)); - } else { - float returnedValue; - if (!absl::SimpleAtof(value, &returnedValue)) - return absl::nullopt; +} - return validRange.clamp(returnedValue); - } +template ::value, int> = 0> +inline absl::optional readOpcode(absl::string_view value, const Range& validRange) +{ + float returnedValue; + if (!absl::SimpleAtof(value, &returnedValue)) + return absl::nullopt; + + return validRange.clamp(returnedValue); } inline absl::optional readBooleanFromOpcode(const Opcode& opcode)