diff --git a/include/boost/math/common_factor_ct.hpp b/include/boost/math/common_factor_ct.hpp index 848c925..bf58b94 100644 --- a/include/boost/math/common_factor_ct.hpp +++ b/include/boost/math/common_factor_ct.hpp @@ -23,7 +23,6 @@ namespace math namespace detail { -#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION // Build GCD with Euclid's recursive algorithm template < static_gcd_type Value1, static_gcd_type Value2 > struct static_gcd_helper_t @@ -54,48 +53,7 @@ namespace detail { BOOST_STATIC_CONSTANT( static_gcd_type, value = Value1 ); }; -#else - // Use inner class template workaround from Peter Dimov - template < static_gcd_type Value1 > - struct static_gcd_helper2_t - { - template < static_gcd_type Value2 > - struct helper - { - BOOST_STATIC_CONSTANT( static_gcd_type, value - = static_gcd_helper2_t::BOOST_NESTED_TEMPLATE - helper::value ); - }; - template < > - struct helper< 0UL > - { - BOOST_STATIC_CONSTANT( static_gcd_type, value = Value1 ); - }; - }; - - // Special case - template < > - struct static_gcd_helper2_t< 0UL > - { - template < static_gcd_type Value2 > - struct helper - { - BOOST_STATIC_CONSTANT( static_gcd_type, value = Value2 ); - }; - }; - - // Build the GCD from the above template(s) - template < static_gcd_type Value1, static_gcd_type Value2 > - struct static_gcd_helper_t - { - BOOST_STATIC_CONSTANT( static_gcd_type, value - = static_gcd_helper2_t::BOOST_NESTED_TEMPLATE - helper::value ); - }; -#endif - -#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION // Build the LCM from the GCD template < static_gcd_type Value1, static_gcd_type Value2 > struct static_lcm_helper_t @@ -112,47 +70,6 @@ namespace detail { BOOST_STATIC_CONSTANT( static_gcd_type, value = 0UL ); }; -#else - // Adapt GCD's inner class template workaround for LCM - template < static_gcd_type Value1 > - struct static_lcm_helper2_t - { - template < static_gcd_type Value2 > - struct helper - { - typedef static_gcd_helper_t gcd_type; - - BOOST_STATIC_CONSTANT( static_gcd_type, value = Value1 - / gcd_type::value * Value2 ); - }; - - template < > - struct helper< 0UL > - { - BOOST_STATIC_CONSTANT( static_gcd_type, value = 0UL ); - }; - }; - - // Special case - template < > - struct static_lcm_helper2_t< 0UL > - { - template < static_gcd_type Value2 > - struct helper - { - BOOST_STATIC_CONSTANT( static_gcd_type, value = 0UL ); - }; - }; - - // Build the LCM from the above template(s) - template < static_gcd_type Value1, static_gcd_type Value2 > - struct static_lcm_helper_t - { - BOOST_STATIC_CONSTANT( static_gcd_type, value - = static_lcm_helper2_t::BOOST_NESTED_TEMPLATE - helper::value ); - }; -#endif } // namespace detail diff --git a/include/boost/math/common_factor_rt.hpp b/include/boost/math/common_factor_rt.hpp index 4582a96..10a92eb 100644 --- a/include/boost/math/common_factor_rt.hpp +++ b/include/boost/math/common_factor_rt.hpp @@ -222,7 +222,6 @@ namespace detail // Function objects to find the best way of computing GCD or LCM #ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS -#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION template < typename T, bool IsSpecialized, bool IsSigned > struct gcd_optimal_evaluator_helper_t { @@ -240,40 +239,6 @@ namespace detail return gcd_integer( a, b ); } }; -#else - template < bool IsSpecialized, bool IsSigned > - struct gcd_optimal_evaluator_helper2_t - { - template < typename T > - struct helper - { - T operator ()( T const &a, T const &b ) - { - return gcd_euclidean( a, b ); - } - }; - }; - - template < > - struct gcd_optimal_evaluator_helper2_t< true, true > - { - template < typename T > - struct helper - { - T operator ()( T const &a, T const &b ) - { - return gcd_integer( a, b ); - } - }; - }; - - template < typename T, bool IsSpecialized, bool IsSigned > - struct gcd_optimal_evaluator_helper_t - : gcd_optimal_evaluator_helper2_t - ::BOOST_NESTED_TEMPLATE helper - { - }; -#endif template < typename T > struct gcd_optimal_evaluator @@ -348,7 +313,6 @@ namespace detail #undef BOOST_PRIVATE_GCD_SF #ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS -#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION template < typename T, bool IsSpecialized, bool IsSigned > struct lcm_optimal_evaluator_helper_t { @@ -366,40 +330,6 @@ namespace detail return lcm_integer( a, b ); } }; -#else - template < bool IsSpecialized, bool IsSigned > - struct lcm_optimal_evaluator_helper2_t - { - template < typename T > - struct helper - { - T operator ()( T const &a, T const &b ) - { - return lcm_euclidean( a, b ); - } - }; - }; - - template < > - struct lcm_optimal_evaluator_helper2_t< true, true > - { - template < typename T > - struct helper - { - T operator ()( T const &a, T const &b ) - { - return lcm_integer( a, b ); - } - }; - }; - - template < typename T, bool IsSpecialized, bool IsSigned > - struct lcm_optimal_evaluator_helper_t - : lcm_optimal_evaluator_helper2_t - ::BOOST_NESTED_TEMPLATE helper - { - }; -#endif template < typename T > struct lcm_optimal_evaluator