mirror of
https://github.com/boostorg/conversion.git
synced 2025-08-03 14:34:33 +02:00
Fixed testing of 128bit integer types and added staic assert that cheks for std::numeric_limits specializations, if they are required for conversion (refs #8790)
[SVN r85072]
This commit is contained in:
@@ -879,6 +879,15 @@ namespace boost {
|
|||||||
{
|
{
|
||||||
#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
|
#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
|
||||||
BOOST_STATIC_ASSERT(!std::numeric_limits<T>::is_signed);
|
BOOST_STATIC_ASSERT(!std::numeric_limits<T>::is_signed);
|
||||||
|
|
||||||
|
// GCC when used with flag -std=c++0x may not have std::numeric_limits
|
||||||
|
// specializations for __int128 and unsigned __int128 types.
|
||||||
|
// Try compilation with -std=gnu++0x or -std=gnu++11.
|
||||||
|
//
|
||||||
|
// http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40856
|
||||||
|
BOOST_STATIC_ASSERT_MSG(std::numeric_limits<T>::is_specialized,
|
||||||
|
"std::numeric_limits are not specialized for integral type passed to boost::lexical_cast"
|
||||||
|
);
|
||||||
#endif
|
#endif
|
||||||
CharT const czero = lcast_char_constants<CharT>::zero;
|
CharT const czero = lcast_char_constants<CharT>::zero;
|
||||||
--end;
|
--end;
|
||||||
|
@@ -558,14 +558,33 @@ void test_conversion_from_to_ulonglong()
|
|||||||
|
|
||||||
|
|
||||||
#ifdef BOOST_LCAST_HAS_INT128
|
#ifdef BOOST_LCAST_HAS_INT128
|
||||||
|
|
||||||
|
template <bool Specialized, class T>
|
||||||
|
struct test_if_specialized {
|
||||||
|
static void test() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
struct test_if_specialized<true, T> {
|
||||||
|
static void test() {
|
||||||
|
test_conversion_from_to_integral_minimal<T>();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
void test_conversion_from_to_int128()
|
void test_conversion_from_to_int128()
|
||||||
{
|
{
|
||||||
test_conversion_from_to_integral_minimal<boost::int128_type>();
|
test_if_specialized<
|
||||||
|
std::numeric_limits<boost::int128_type>::is_specialized,
|
||||||
|
boost::int128_type
|
||||||
|
>::test();
|
||||||
}
|
}
|
||||||
|
|
||||||
void test_conversion_from_to_uint128()
|
void test_conversion_from_to_uint128()
|
||||||
{
|
{
|
||||||
test_conversion_from_to_integral_minimal<boost::uint128_type>();
|
test_if_specialized<
|
||||||
|
std::numeric_limits<boost::int128_type>::is_specialized,
|
||||||
|
boost::uint128_type
|
||||||
|
>::test();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user