From 8ce22c666db29726848c522f7d4eac24622ffae4 Mon Sep 17 00:00:00 2001 From: Nicolas Clauvelin Date: Tue, 13 Mar 2018 17:28:38 -0400 Subject: [PATCH] REVISED OVERFLOW IMPLEMENTATION USING INTEGRAL CONSTANT The check_overflow implementation now relies on std::integral_constant. This avoids the definition of a constexpr bool member. --- register/Field.h | 17 +++++++---------- register/MergeWrite.h | 2 +- register/Overflow.h | 5 +---- register/Register.h | 2 +- 4 files changed, 10 insertions(+), 16 deletions(-) diff --git a/register/Field.h b/register/Field.h index a5be8b1..0c283b9 100644 --- a/register/Field.h +++ b/register/Field.h @@ -79,14 +79,11 @@ namespace cppreg { * This is only used for the template form of the write method. */ template - struct check_overflow { - constexpr static const bool result = - internals::check_overflow< - parent_register::size, - value, - (mask >> offset) - >::result::value; - }; + struct check_overflow : internals::check_overflow< + parent_register::size, + value, + (mask >> offset) + > {}; //!@ Field read method. /** @@ -147,7 +144,7 @@ namespace cppreg { typename std::enable_if< !has_shadow && - check_overflow::result, + check_overflow::value, T >::type write() noexcept { @@ -168,7 +165,7 @@ namespace cppreg { typename std::enable_if< has_shadow && - check_overflow::result, + check_overflow::value, T >::type write() noexcept { diff --git a/register/MergeWrite.h b/register/MergeWrite.h index 49b0fc2..93963c6 100644 --- a/register/MergeWrite.h +++ b/register/MergeWrite.h @@ -131,7 +131,7 @@ namespace cppreg { typename std::enable_if< (internals::check_overflow< Register::size, new_value, (F::mask >> F::offset) - >::result::value), + >::value), T >::type&& with() const && noexcept { diff --git a/register/Overflow.h b/register/Overflow.h index 1f147e6..b5ba809 100644 --- a/register/Overflow.h +++ b/register/Overflow.h @@ -34,10 +34,7 @@ namespace internals { typename RegisterType::type value, typename RegisterType::type limit > - struct check_overflow { - using result = - typename std::integral_constant::type; - }; + struct check_overflow : std::integral_constant {}; } diff --git a/register/Register.h b/register/Register.h index 63f0651..b5486fb 100644 --- a/register/Register.h +++ b/register/Register.h @@ -110,7 +110,7 @@ namespace cppreg { typename std::enable_if< internals::check_overflow< size, value, (F::mask >> F::offset) - >::result::value, + >::value, T >::type&& merge_write() noexcept {